加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

xcode – 将目标文件复制到CMake中的后期制作步骤中的另一个位置

发布时间:2020-12-15 02:01:07 所属栏目:百科 来源:网络整理
导读:我有一个动态库,根据配置获得不同的名称,在CMake脚本中指定: set_target_properties(${name} PROPERTIES OUTPUT_NAME ${outputName}64)set_target_properties(${name} PROPERTIES DEBUG_OUTPUT_NAME ${outputName}64_d) 最终的结果是,我在发布和调试版本
我有一个动态库,根据配置获得不同的名称,在CMake脚本中指定:

set_target_properties(${name} PROPERTIES OUTPUT_NAME ${outputName}64)
set_target_properties(${name} PROPERTIES DEBUG_OUTPUT_NAME ${outputName}64_d)

最终的结果是,我在发布和调试版本上得到一个不同的名字。我想将结果库复制到不同的目录作为后期制作步骤,但是,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}
)

这对于发布版本是非常有用的,但是对于调试,源代码不包括我预期的_d。
如何获取目标的输出路径,以便我可以复制文件?

注意:从上面的代码段可以看出,这是目前为Windows / Visual Studio,但我也希望这可以在OS X / Xcode / make上工作。

注意:我需要将库放在一个额外的目录中,作为依赖该库的其他几个项目的输出目录,以便这些项目能够在运行时加载库。可以接受的替代解决方案是能够创建执行复制的自定义目标,以便其他项目可以依赖于这个项目,而这依赖于库。

解决方法

而不是使用过时的LOCATION属性,更喜欢使用生成器表达式:

add_custom_command(TARGET mylibrary POST_BUILD
    COMMAND ${CMAKE_COMMAND} -E copy $<TARGET_FILE:mylibrary> ${targetfile}
)

您也可以直接通过设置目标属性RUNTIME_OUTPUT_DIRECTORY来生成目标目录中的exe,而不是复制它。这具有每个配置选项(例如RUNTIME_OUTPUT_DIRECTORY_DEBUG)。

set_target_properties(mylibrary PROPERTIES
                      RUNTIME_OUTPUT_DIRECTORY_DEBUG <debug path>
                      RUNTIME_OUTPUT_DIRECTORY_RELEASE <release path>
)

详细信息运行:

cmake --help-property "RUNTIME_OUTPUT_DIRECTORY"
cmake --help-property "RUNTIME_OUTPUT_DIRECTORY_<CONFIG>"

此外,即使在Windows上,您也可以将路径分隔符全部用于斜杠。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读