【发布时间】:2021-09-27 11:55:45
【问题描述】:
在标题中,我希望能够检查 TARGET Foo 是否是共享库(或静态库),因此我需要将其添加到 .csproj 生成的文件中(使用生成器表达式)。
类似这样的:
CMakeLists.txt:
...
file(GENERATE
OUTPUT .../$<CONFIG>/foo.csproj
INPUT foo.csproj.in)
...
foo.csproj.in:
...
<Content Include="$<TARGET_FILE:Bar>$<$<BOOL:$<TARGET_PROPERTY:Foo:BUILD_SHARED_LIBS>>:;$<TARGET_SONAME_FILE:Foo>>">
<PackagePath>runtimes/@RUNTIME_IDENTIFIER@/native/%(Filename)%(Extension)</PackagePath>
<Pack>true</Pack>
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
...
预期输出
- 如果
Foo是共享库(例如option(BUILD_SHARED_LIBS "Build shared libraries (.so or .dyld)." ON))
我想要:
foo.csproj
...
<Content Include="build/lib/Bar.so;build/lib/Foo.so">
<PackagePath>runtimes/linux-x64/native/%(Filename)%(Extension)</PackagePath>
<Pack>true</Pack>
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
...
- 如果
Foo是静态库(例如-DBUILD_SHARED_LIBS=OFF)
我想要:
foo.csproj
...
<Content Include="build/lib/Bar.dll">
<PackagePath>runtimes/win-x64/native/%(Filename)%(Extension)</PackagePath>
<Pack>true</Pack>
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
...
【问题讨论】:
-
您可以尝试检查目标的
TYPE属性并将其与SHARED_LIBRARY或STATIC_LIBRARY进行比较:stackoverflow.com/a/31908066/3440745
标签: cmake