我有一个使用CMake的跨平台项目。我正在进行源外构建,所以基本上我有一个源目录“src”,其中包含CMakeLists.txt,然后我有一个“src / build”目录,我在其中生成了源外构建。
但是,在使用Visual Studio(2013)时,它不会将可执行文件放在构建目录中,而是放在“src / build / Debug”中(取决于所选的配置)。我认为这在VS内被称为“$(OutDir)”。如何在我的CMakeLists.txt中引用(运行时)输出目录,以便我可以复制可执行文件所在的DLL和着色器?
编辑:建议的重复答案对我来说似乎不正确。在那个答案中,你只是强制输出目录是静态的,如果你使用像Visual Studio这样的多配置构建系统,这听起来是错误的。
答案 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>)