【问题标题】:Running a python script at build time in CMake, requires no dependencies在 CMake 中构建时运行 python 脚本,不需要依赖项
【发布时间】: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,它开始工作了!!!

标签: cmake ros catkin


【解决方案1】:

根据@Tsyvarev 的评论,通过将 WORKING_DIRECTORY 选项设置为 add_custom_command 解决了问题!

【讨论】:

    猜你喜欢
    • 2020-12-05
    • 1970-01-01
    • 1970-01-01
    • 2015-05-13
    • 1970-01-01
    • 2023-03-06
    • 1970-01-01
    • 2012-02-27
    • 1970-01-01
    相关资源
    最近更新 更多