如何在CMakeLists.txt中引用Visual Studio输出目录?

时间:2015-03-11 13:28:54

标签: visual-studio-2013 cmake

我有一个使用CMake的跨平台项目。我正在进行源外构建,所以基本上我有一个源目录“src”,其中包含CMakeLists.txt,然后我有一个“src / build”目录,我在其中生成了源外构建。

但是,在使用Visual Studio(2013)时,它不会将可执行文件放在构建目录中,而是放在“src / build / Debug”中(取决于所选的配置)。我认为这在VS内被称为“$(OutDir)”。如何在我的CMakeLists.txt中引用(运行时)输出目录,以便我可以复制可执行文件所在的DLL和着色器?

编辑:建议的重复答案对我来说似乎不正确。在那个答案中,你只是强制输出目录是静态的,如果你使用像Visual Studio这样的多配置构建系统,这听起来是错误的。

1 个答案:

答案 0 :(得分:1)

我通过使用“文件(GENERATE OUTPUT)”复制文件解决了我的问题,该文件支持StAlphonzo建议的cmake-generator表达式:

foreach (file ${SHADER_SOURCES})
    file (GENERATE OUTPUT $<CONFIG>/${file} INPUT ${PROJECT_SOURCE_DIR}/${file})
endforeach()

我还想提一下解决这个问题的第二种方法,我发现我认为通过添加自定义命令实际上更正确:

add_custom_command(TARGET target ${CMAKE_COMMAND} -E copy ${PROJECT_SOURCES_DIR}/foo $<TARGET_FILE_DIR:target>)