我在 CMake 中有以下简单示例:
add_custom_command(TARGET MyTarget POST_BUILD COMMAND ${CMAKE_COMMAND} -E echo "Hello! $<CONFIG>")
当我跑步时:
cmake --build . --config Debug --target MyTarget --verbose
我在 Windows 上得到输出:
"C:\Program Files\CMake\bin\cmake.exe" -E echo "Hello! Debug"
在 Linux 上:
/usr/bin/cmake -E echo Hello!\
似乎在 Linux 上
$<CONFIG>
被评估为空字符串。我想提一下,在 Windows 上我使用 cmake version 3.24.1
而在 Linux 上我使用 cmake version 3.22.1
这是 CMake 中的错误还是我以错误的方式使用
$<CONFIG>
?
是否可以通过任何其他方式获取配置?
我的实际用例是我需要根据配置将构建输出复制到不同的目录中,我正在使用
set(installDirectory "${artifactsDirectory}/$<LOWER_CASE:$<CONFIG>>")
,它在 Windows 上按预期工作,但在 Linux 上失败。
编辑: 我尝试了 CMake 文档 中的示例,结果类似:
add_custom_command(TARGET ${name} POST_BUILD COMMAND ${CMAKE_COMMAND} -E echo "$<$<CONFIG:Debug>:DEBUG_MODE>")```
在 Windows 上(cmake 版本 3.24.1)它的计算结果为:
"C:\Program Files\CMake\bin\cmake.exe" -E echo DEBUG_MODE
在 Linux(cmake 版本 3.22.1)上它的计算结果为:
/usr/bin/cmake -E echo
这是 CMake 中的错误吗
号
我用错 $ 了吗?
正确的方式。
是否可以通过任何其他方式获取配置?
Linux 上的配置为空,因此您得到的结果是正确的。
来自https://cmake.org/cmake/help/latest/manual/cmake.1.html
--config
**For multi-configuration generators**, choose configuration <cfg>.`.
因为你没有在 Linux 上使用多配置生成器,所以这个选项被忽略了。在 Linux 上使用
-DCMAKE_BUILD_TYPE=Debug
作为单配置生成器,例如 Make,或者在 Linux 上使用多配置生成器(Ninja multi-config)。另见https://cmake.org/cmake/help/latest/manual/cmake-generators.7.html.