Ant*_*ony 7 cmake cmake-custom-command
目前我需要每次在 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})
Run Code Online (Sandbox Code Playgroud)
它可以工作,但并不是每次都执行。它仅在修改 CMakeLists.txt 时执行。
因此,经过一番搜索后,人们建议使用
add_custom_target(...)
Run Code Online (Sandbox Code Playgroud)
和
add_custom_command(...)
Run Code Online (Sandbox Code Playgroud)
我也尝试过:
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}
)
Run Code Online (Sandbox Code Playgroud)
它根本不运行脚本。我知道它没有运行该脚本,因为我在 Notepad++ 中打开了该文件,并且它不会询问我是否要像execute_process() 运行后那样切换到该文件的较新版本。add_custom_command() 的其他变体也不会运行该脚本。没有与此运行相关的错误,除非我不包含 ${PYTHON_EXECUTABLE} ,这会导致“%1 不是有效的 Win32 命令”。那么如何才能有效地让 Python 脚本每次都在 CMake 中运行呢?
编辑:这里的答案不起作用。 如何在构建时始终运行命令而不考虑任何依赖项?
您需要添加对自定义命令的依赖项以检查 OriginalHeader.h 上的更改,并在发生更改时重新生成 __header.h 和 header.h。
add_executable(MyExe main.cpp ${CMAKE_CURRENT_BINARY_DIR}/__header.h)
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
DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/OriginalHeader.h
COMMAND python ${py_cmd}
)
Run Code Online (Sandbox Code Playgroud)
我只用 python 更改了 ${PYTHON_EXECUTABLE} 。我能够运行这个 python 脚本(如下),每次在 OriginalHeader.h 中检测到更改时,都会打印、创建目录并生成两个文件 __header.h 和 header.h,或者 __header.h/header.h 不会还存在。
add_executable(MyExe main.cpp ${CMAKE_CURRENT_BINARY_DIR}/__header.h)
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
DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/OriginalHeader.h
COMMAND python ${py_cmd}
)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
26756 次 |
| 最近记录: |