带 $<CONFIG> 的 CMake 生成器表达式在 Windows 和 Linux 上的计算方式不同

问题描述 投票:0回答:1

我在 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
1个回答
1
投票

这是 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.

© www.soinside.com 2019 - 2024. All rights reserved.