2011-10-10 144 views
1

这个我可能是trival,但我还没有弄明白。我在与源代码相同的目录中有一个.ini文件,我希望cmake将inifile.ini复制到生成.exe文件的目录中。这个dirctory可能会有所不同,这取决于我是否执行发布或调试构建,以及是否执行内部源代码或源代码构建。我已经走到这一步:如何将文件复制到与.exe文件相同的目录

configure_file(${myapp_SOURCE_DIR}/src/myinifile.ini 
       ${myapp_BINARY_DIR}/bin/${????}/myinifile.ini COPYONLY) 

但我需要包括在根据生成类型的目标路径斌/调试或斌/释放。是否有一个cmake变量,我可以使用它指向生成.exe的实际目录。或者什么是最好的方式来做到这一点。

回答

2

您可以获得LOCATION属性以查找目标的输出路径。接下来,您可以在add_custom_command使用它的值:

get_target_property(exepath target_name LOCATION) 
get_filename_component(outputpath "${exepath}" PATH) 
add_custom_command(TARGET target_name POST_BUILD 
    COMMAND "${CMAKE_COMMAND}" -E copy_if_different "${myapp_SOURCE_DIR}/src/myinifile.ini" "${outputpath}") 

该代码会自动处理建立类型依赖。

+0

无法从target_name获取LOCATION属性,它为空。我用add_executable(target_name WIN32 $ {SRCS})定义目标 – lgwest

+0

@lgwest我发布的代码完全适合我。你在哪里放置这些代码?它应该在'add_executable'命令之后。 –

+0

好吧,它似乎是正确的,它得到一个小的测试用例,但不是在我的真实项目上工作,但这必定是另一个错误。 – lgwest

相关问题