我有一个使用CMake的跨平台项目。我正在执行源代码外生成,因此基本上我有一个包含CMakeLists.txt的源目录“ src”,然后我在其中生成源代码外生成的“ src / build”目录。
但是,在使用Visual Studio(2013)时,它不会将可执行文件放置在生成目录中,而是放置在“ src / build / Debug”中(取决于所选配置)。我认为这在VS中被称为“ $(OutDir)”。如何在CMakeLists.txt中引用(运行时)输出目录,以便可以将DLL和着色器复制到可执行文件所在的位置?
编辑:建议的重复答案对我来说似乎不正确。在该答案中,您只是强制输出目录为静态,如果您使用的是像Visual Studio这样的多配置生成系统,这听起来是错误的。
我通过使用支持StAlphonzo建议的cmake-generator-expressions的“文件(GENERATE OUTPUT)”复制文件来解决了我的问题:
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>)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句