目前我需要在每次运行CMake时运行一个Python脚本,该脚本生成一个.qrc文件。我不能使用Qt Designer,必须使用CMake。 正在使用set(CMAKE_AUTORCC ON),但是每当添加资源或更改名称时都会失败,因此需要使用python脚本。脚本本身已经生成了输出,一切都正常工作,因此我不需要来自CMake本身的输出。我目前尝试了以下方法:
include(FindPythonInterp)
set (py_cmd "QRC_Updater.py")
execute_process(
COMMAND ${PYTHON_EXECUTABLE} ${py_cmd}
WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
RESULT_VARIABLE py_result
)
message(STATUS "Python result: ${py_result})
它可以工作,但并非每次都执行。它只在修改CMakeLists.txt时执行。
因此,在一些搜索后,人们建议使用
add_custom_target(...)
并且
add_custom_command(...)
我也尝试了这个:
add_custom_target(
always_run_target ALL
DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/__header.h
)
add_custom_command(
OUTPUT
${CMAKE_CURRENT_BINARY_DIR}/__header.h
${CMAKE_CURRENT_BINARY_DIR}/header.h
COMMAND ${PYTHON_EXECUTABLE} ${py_cmd}
)
这个问题与脚本根本没有运行有关。我知道脚本没有运行,因为我在Notepad++中打开了该文件,它也没有要求我切换到新版本的文件,就像在execute_process()运行后那样。其他变化的add_custom_command()也不会运行该脚本。在此运行时没有任何错误,除非我不包含${PYTHON_EXECUTABLE},这会导致“%1不是有效的Win32命令”。那么,如何在CMake中使Python脚本每次都能有效运行?
编辑: 这里的答案都不起作用。 如何在构建时始终运行命令,而不管任何依赖关系?
make
,cmake --build
)?您说add_custom_target
创建了一个新项目 - 在Visual Studio中,每个目标实际上都是一个新项目。 - Tsyvarevadd_dependency(<your-target> always_run_target)
。 - Tsyvarev