【发布时间】:2015-11-26 12:03:35
【问题描述】:
我想将 qml 文件从源目录复制到构建目录。以下脚本仅在第一次时才能正常工作。当我更改任何 *.qml 文件并运行 make 时,它们不会被复制到构建文件夹,它们不会被更新。我做错了什么?
file(GLOB_RECURSE SOURCES *.cpp)
file(GLOB_RECURSE QMLS *.qml)
add_library(MyLib SHARED ${SOURCES} ${QMLS})
foreach(QmlFile ${QMLS})
add_custom_command(TARGET MyLib POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy_if_different
${QmlFile} $<TARGET_FILE_DIR:MyLib>)
endforeach()
【问题讨论】:
-
您能否添加您正在使用/定位的 CMake 版本和构建环境?一般来说,将非源文件添加到
add_library()是为了在生成的IDE 项目中列出这些文件。它不会向该文件添加依赖项。我认为您正在寻找的是目标属性LINK_DEPENDS:“指定此目标的链接规则所依赖的文件的完整路径的分号分隔列表。如果任何命名文件,目标二进制文件将被链接比它新。” -
@Florian 建议设置
LINK_DEPENDS属性将解决最小代码编辑问题,但使用 non-TARGETadd_custom_command,正如 Angew 回答的那样,似乎是这里比较合适。如果库链接实际上不依赖于.qml,为什么每次更改这些文件时都要重新链接?如果复制的.qml文件不依赖于库,为什么只有在.cpp文件发生更改时才重新检查原始文件的内容?
标签: cmake copy dependencies