gpt4 book ai didi

cmake 不会在自定义命令中复制文件

转载 作者:行者123 更新时间:2023-12-05 00:57:53 33 4
gpt4 key购买 nike

我想将 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()

最佳答案

而Angew的answer很好,可以消除额外目标的使用。为此,add_library调用应使用复制 .qml文件(而不是原始文件,如问题帖子中的脚本):

# This part is same as in Angew's answer
set(copiedQmls "")
foreach(QmlFile ${QMLS})
get_filename_component(nam ${QmlFile} NAME)
add_custom_command(
OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${nam}
COMMAND ${CMAKE_COMMAND} -E copy_if_different ${QmlFile} ${CMAKE_CURRENT_BINARY_DIR}
DEPENDS ${QmlFile}
COMMENT "Copying ${QmlFile}"
VERBATIM
)
list(APPEND copiedQmls ${CMAKE_CURRENT_BINARY_DIR}/${nam})
endforeach()

# But instead of creating new target, we reuse library one.
add_library(MyLib SHARED ${SOURCES} ${copiedQmls})

构建库目标时,它会触发 add_library 中的非源文件需要更新的调用(如果有对应的 add_custom_command 调用),但是 更新非源文件不会强制重建库文件 .这就是您的原始代码无法按预期工作的原因。

注意,因为 .qml文件不被 CMake 识别为来源,您 不需要设置 GENERATED他们的属性(property),如上所述 here .

关于cmake 不会在自定义命令中复制文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33938239/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com