我在Visual Studio 2013,CMake 3.5.1,Windows 10.我试图通过CMake复制一些文件,如下所示:
file(COPY ${IMAGES} DESTINATION ${CMAKE_BINARY_DIR}/bin/Release)
是否可以将“Release”替换为代表如下配置的变量:
file(COPY ${IMAGES} DESTINATION ${CMAKE_BINARY_DIR}/bin/${Variable})
我试过了
file(COPY ${IMAGES} DESTINATION ${CMAKE_BINARY_DIR}/bin/${CMAKE_BUILD_TYPE})
但是当我使用消息将其打印出来时,CMAKE_BUILD_TYPE是一个空字符串,我也尝试了
file(COPY ${IMAGES} DESTINATION ${CMAKE_BINARY_DIR}/bin/$<CONFIGURATION>)
但由于某种原因,文件命令无法解密$<CONFIGURATION>
,而命令如
add_custom_target(run COMMAND ${CMAKE_BINARY_DIR}/bin/$<CONFIGURATION>/Test.exe)
即可。什么是正确的方法来提取Visual Studio目前是否在CMake中的Release或Debug中构建?
答案 0 :(得分:5)
{CM}运行期间执行file
命令,而不是在构建时(即VS运行时)执行。
这也意味着,不能使用生成器表达式(例如$<CONFIG>
),因为这些是在构建时评估的。
(提示:只要没有明确引用CMake文档中特定命令使用生成器表达式,该命令就不支持它们。
为什么${CMAKE_BUILD_TYPE}
为空的原因是由于你可能没有在调用CMake时指定它:
cmake -DCMAKE_BUILD_TYPE=Debug ..
但是,使用它,意味着只为 Debug 配置生成构建文件。那显然不是你想要的。
解决您的问题:使用生成器表达式是正确的方法,因为您已经使用add_custom_target
(或add_custom_command
)找到了。
您可以将自定义命令用作其他“真实”目标的依赖项,并且可以通过add_custom_command
为特定目标指定post / / pre-build和pre-link命令。< / p>
正如文档所述COMMAND
的{{1}}参数:
add_custom_command
的参数可能使用生成器表达式。对生成器表达式中的目标名称的引用意味着目标级依赖项,但不是文件级依赖项。使用COMMAND
选项列出目标名称以添加文件级依赖项。
在成功构建目标后复制文件:
DEPENDS