我们使用CMake在我们的SVN中生成源代码的Visual Studio文件.现在我的工具需要一些DLL文件与可执行文件位于同一文件夹中.DLL文件位于源旁边的文件夹中.
如何更改我CMakeLists.txt的生成的Visual Studio项目将在发布/调试文件夹中已经具有特定的DLL文件,或者在编译时将它们复制?
我有一个动态库,根据配置获取不同的名称,在CMake脚本中指定:
set_target_properties(${name} PROPERTIES OUTPUT_NAME ${outputName}64)
set_target_properties(${name} PROPERTIES DEBUG_OUTPUT_NAME ${outputName}64_d)
Run Code Online (Sandbox Code Playgroud)
最终结果是我在发布和调试版本上获得了不同的名称.我想将生成的库复制到另一个目录作为构建后的步骤,但是CMake-Fu的礼物(?)并没有真正对你微笑.
我试过这样做:
GET_TARGET_PROPERTY(origfile mylibrary LOCATION)
STRING(REGEX REPLACE "/" "\\\\" origfile ${origfile})
set(targetfile my_target_path\\${CMAKE_CFG_INTDIR}\\)
STRING(REGEX REPLACE "/" "\\\\" targetfile ${targetfile})
add_custom_command(TARGET mylibrary POST_BUILD
COMMAND copy ${origfile} ${targetfile}
)
Run Code Online (Sandbox Code Playgroud)
这适用于发布版本,但是对于调试,源代码不包括我期望的_d. 如何获取目标的输出路径以便我可以复制文件?
注意:从上面的代码片段可以看出,这是目前用于Windows/Visual Studio的,但我希望这也适用于OS X/Xcode/make.
注意:我需要将库放在一个额外的目录中,该目录充当依赖于此库的其他几个项目的输出目录,以便这些项目能够在运行时加载库.可接受的替代解决方案是能够创建执行复制的自定义目标,以便其他项目可以依赖于此项目,而该项目又依赖于库.
我正在尝试很长时间来理解生成器表达式的好处, 例如$<xxx:yy>在CMake中,何时以及如何使用它们.任何人都可以通过一些例子清楚地解释清楚.非常感谢