【发布时间】:2018-03-01 15:51:00
【问题描述】:
目前我需要每次在 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 命令”。那么如何才能有效地让 Python 脚本在 CMake 中每次都运行呢?
编辑: 这里的答案不起作用。 How to always run command when building regardless of any dependency?
【问题讨论】:
-
也许你在
add_custom_command中也需要WORKING_DIRECTORY? -
我实际上在 add_custom_command 中使用了 WORKING_DIRECTORY 并以相同的结果结束。脚本永远不会运行。
-
这个答案 - stackoverflow.com/a/43206544/3440745 - 似乎是实现目标的最优雅方式,不知道为什么它不是得分最高的答案。
-
@Tsyvarev 我也试过那个。脚本永远不会运行。如果您查看 cmets,它会显示我已经尝试过的内容,几乎是逐字记录。该问题的 OP 还说它不能可靠地工作。
标签: cmake cmake-custom-command