macOS下CMake自定义目标名称意外覆盖.NET项目AssemblyName导致输出DLL名称不符的问题排查求助
macOS下CMake自定义目标名称意外覆盖.NET项目AssemblyName导致输出DLL名称不符的问题排查求助
各位好,我遇到一个挺奇怪的跨平台构建问题,想请大家帮忙分析下根源:
我有一个包含多个子项目的C++ CMake工程,其中一个子项目是ScriptCore,它本质就是一个ScriptCore.csproj和若干C#脚本文件。
这个子项目的CMake构建逻辑是定义了一个自定义目标,执行dotnet build命令:
add_custom_target(ScriptCore ALL WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} COMMAND ${DOTNET_EXE} build ScriptCore.csproj -c ${SCRIPTCORE_CONFIG} -o ${SCRIPTCORE_OUTPUT_DIR}/bin -p:BaseIntermediateOutputPath=${SCRIPTCORE_OUTPUT_DIR}/obj/ )
对应的.csproj配置里,我明确指定了AssemblyName为Phezu-ScriptCore:
<Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> <AssemblyName>Phezu-ScriptCore</AssemblyName> <TargetFramework>netstandard2.1</TargetFramework> <RootNamespace>PhezuEngine</RootNamespace> <LangVersion>latest</LangVersion> <EnableDefaultCompileItems>false</EnableDefaultCompileItems> </PropertyGroup> <ItemGroup> <Compile Include="Source\**\*.cs" /> </ItemGroup> </Project>
问题现象
在Windows平台下构建完全正常,输出的DLL是预期的Phezu-ScriptCore.dll;但在macOS上构建时,输出的DLL却变成了ScriptCore.dll——这个名字刚好和CMake里自定义目标的名称一致。
我已经排查过的点
- 检查了所有中间构建文件,也让
dotnet build输出详细日志到文件,全程没找到任何覆盖AssemblyName配置的地方; - 手动在终端执行和CMake里完全一样的
dotnet build命令时,输出的DLL名称是正确的Phezu-ScriptCore.dll,只有通过CMake触发构建才会出现名称错误的情况。
我的疑问
- 为什么CMake里的自定义目标名称会影响到.NET项目的输出DLL名称?按道理两者应该是独立的构建环节才对?
- 这种问题只出现在macOS上,Windows完全正常的原因是什么?
我目前不想采用直接重命名DLL或者修改CMake目标名称的临时方案,希望能搞清楚这个现象的根本原因,还请各位大佬指点!
内容来源于stack exchange
相关产品推荐
相关产品推荐

