在 CMake 中构建时运行 python 脚本,不需要依赖项
Posted
技术标签:
【中文标题】在 CMake 中构建时运行 python 脚本,不需要依赖项【英文标题】:Running a python script at build time in CMake, requires no dependencies 【发布时间】:2021-02-11 09:54:46 【问题描述】:我有一个 python 脚本 h2py.py 将头文件 .hpp 转换为 .py 文件。
我希望每次使用 CMake 构建项目时都运行这个 python 脚本。 没有其他项目或文件依赖于脚本生成的文件。
到目前为止,我已经尝试过:
find_package(PythonInterp REQUIRED)
add_custom_target(
run ALL
COMMAND $PYTHON_EXECUTABLE $CMAKE_CURRENT_SOURCE_DIR/include/converter/h2py.py $CMAKE_CURRENT_SOURCE_DIR/include/converter/
COMMENT "Converting .hpp file to .py file"
)
add_dependencies(converter run)
但这不会生成 .hpp 文件的 .py 等效文件(在脚本中指定)
EDIT :当我在终端中运行 python 脚本 h2py.py 时,它会按预期生成 .hpp 文件的 .py 等效值。但是当我运行 CMake 文件时它不会生成 .py 文件。
这是整个 CMake 文件:
cmake_minimum_required(VERSION 2.8.3)
project(converter)
set(CMAKE_BUILD_TYPE release)
add_compile_options(-std=c++11)
## Find catkin macros and libraries
## if COMPONENTS list like find_package(catkin REQUIRED COMPONENTS xyz)
## is used, also find other catkin packages
find_package(catkin REQUIRED
roscpp
geometry_msgs
eigen_conversions
std_msgs
tf_conversions
tf
genmsg
message_generation
sensor_msgs
rospy
gazebo_msgs
)
catkin_package(
#DEPENDS Eigen libpcl-all-dev gnuplot
CATKIN_DEPENDS roscpp sensor_msgs tf_conversions tf geometry_msgs message_generation
INCLUDE_DIRS include
LIBRARIES $PROJECT_NAME
)
###########
## Build ##
###########
## Specify additional locations of header fils
## Your package locations should be listed before other locations
include_directories(
include
$catkin_INCLUDE_DIRS
)
## Declare a C++ library
add_library($PROJECT_NAME
src/$PROJECT_NAME/motion_covariance.cpp
src/$PROJECT_NAME/tf_utils.cpp
)
target_link_libraries($PROJECT_NAME $catkin_LIBRARIES $Boost_LIBRARIES )
find_package(PythonInterp REQUIRED)
add_custom_target(
run ALL
COMMAND $PYTHON_EXECUTABLE $CMAKE_CURRENT_SOURCE_DIR/include/converter/h2py.py $CMAKE_CURRENT_SOURCE_DIR/include/converter/
COMMENT "Converting .hpp file to .py file"
)
add_dependencies(converter run)
【问题讨论】:
“但是这不会生成 .hpp 文件的 .py 等效文件(在脚本中指定)” - 你的意思是你的命令在构建时不运行该项目?我发现这是不可能的,因为您为add_custom_target
指定了 ALL
关键字。请详细说明你的情况。
当我在终端中运行 python 脚本 h2py.py 时,它会按预期生成 .hpp 文件的 .py eqvivalent。但是当我运行 CMake 文件时它不会生成 .py 文件
可能您的脚本没有准备好从构建目录运行。如果您希望 CMake 从另一个目录(例如从源目录)运行您的脚本,请将适当的 WORKING_DIRECTORY
选项添加到 add_custom_command
。如果这不起作用,那么问题出在您的 python 脚本中,如果不查看它,我们将无法帮助您。
感谢@Tsyvarev,通过设置WORKING_DIRECTORY,它开始工作了!!!
【参考方案1】:
根据@Tsyvarev 的评论,通过将 WORKING_DIRECTORY 选项设置为 add_custom_command 解决了问题!
【讨论】:
以上是关于在 CMake 中构建时运行 python 脚本,不需要依赖项的主要内容,如果未能解决你的问题,请参考以下文章
如何在构建之前使CMake运行python脚本,以便为我的项目生成文件以在构建中使用?
如何在CMAKE和CLION中的每次构建后运行复制脚本? [重复]
如何使用 Visual Studio Code 为 cmake 添加预构建步骤?
在 CMake 中使用 setup.py 构建 python 包