Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Cmake 将文件依赖项添加到自定义目标_Cmake - Fatal编程技术网

Cmake 将文件依赖项添加到自定义目标

Cmake 将文件依赖项添加到自定义目标,cmake,Cmake,我想设置CMake,以便在.qrc文件中引用的文件内容发生更改时构建qresource文件。例如,我有一些qml文件打包到qrc文件中,如果qml文件发生更改,则需要重新编译qrc 我有下面的宏来运行资源编译器,但它只会在资源文件本身发生更改时重建它 MACRO(PYQT5_WRAP_RC outfiles) FOREACH(it ${ARGN}) GET_FILENAME_COMPONENT(outfile ${it} NAME_WE) GET_FILENAME_COMPO

我想设置CMake,以便在.qrc文件中引用的文件内容发生更改时构建qresource文件。例如,我有一些qml文件打包到qrc文件中,如果qml文件发生更改,则需要重新编译qrc

我有下面的宏来运行资源编译器,但它只会在资源文件本身发生更改时重建它

MACRO(PYQT5_WRAP_RC outfiles)
  FOREACH(it ${ARGN})
    GET_FILENAME_COMPONENT(outfile ${it} NAME_WE)
    GET_FILENAME_COMPONENT(infile ${it} ABSOLUTE)
    SET(outfile ${CMAKE_CURRENT_SOURCE_DIR}/${outfile}_rc.py)
    ADD_CUSTOM_TARGET(${it} ALL
      DEPENDS ${outfile}
    )
    ADD_CUSTOM_COMMAND(OUTPUT ${outfile}
      COMMAND ${PYRCC5BINARY} ${infile} -o ${outfile}
      MAIN_DEPENDENCY ${infile}
    )
    SET(${outfiles} ${${outfiles}} ${outfile})
  ENDFOREACH(it)
ENDMACRO (PYQT5_WRAP_RC)
宏的使用方式如下:

PYQT5_WRAP_RC(rc_gen file1.qrc file2.qrc ...)
如果qrc文件引用的某个文件发生更改,如何使其重新编译


我需要做些什么吗?

在我看来,您正在寻找的命令是:

这定义了生成指定输出文件的命令。靶子 在同一目录(CMakeLists.txt文件)中创建,该目录指定 将自定义命令作为源文件的输出指定给 在生成时使用命令生成文件


正确配置依赖项,您应该能够在真正需要时重新编译文件。

如果我正确理解您的情况,问题是CMake不知道qrc文件是什么,也不知道qrc文件引用了其他一些文件。这种依赖性对于CMake是隐式的(与C++比较包括;但是对于那些CMASE有特殊的机制来检测依赖性)。 因此,据我所知,您可以使用
add_custom_target
(始终执行),但不仅要将qrc文件添加到其依赖项,还要编写一些脚本,这些脚本可以检查qrc中引用的文件是否也是最新的,如果不是,请触摸qrc文件)

当然,您可以使用上面引用的另一个答案中的方法来接触qrc文件,但您必须开发自己的脚本来提取qrc文件中引用的文件路径。然后,您可以使用CMake脚本工具检查它们是否是最新的,并触摸qrc文件