当.qrc文件中引用的文件内容发生变化时,我想设置CMake来构建qresource文件。例如,我有一些打包到qrc文件中的qml文件,如果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文件中引用的文件之一发生变化,我该怎么做才能重新编译qrc文件?
我需要做一些事情convoluted like this吗?
答案 0 :(得分:0)
在我看来,您正在寻找的命令是add_custom_command:
这定义了一个生成指定OUTPUT文件的命令。目标 在指定any的同一目录(CMakeLists.txt文件)中创建 自定义命令的输出作为源文件被赋予规则 在构建时使用命令生成文件。
正确配置依赖项,只有在真正需要时才能重新编译文件。
答案 1 :(得分:0)
如果我理解你的情况,问题是CMake不知道qrc文件是什么,也不知道,qrc文件引用了其他一些文件。这种依赖关系是CMake隐含的(与C ++包含比较;但对于那些cmake有特殊机制来检测依赖关系)。
所以,据我所知,你可以做的是使用add_custom_target
(执行始终),但不仅要将qrc文件添加到其依赖,还要编写一些脚本,哪个检查qrc中引用的文件也是最新的,如果不是,则触摸qrc文件。)
当然,您可以使用上面引用的其他答案中的方法来触摸qrc文件,但是您必须开发自己的脚本来提取qrc文件中引用的文件路径。然后,您可以使用CMake脚本设施检查它们是否是最新的并触摸qrc文件。