在 CMake 中构建时运行 python 脚本,不需要依赖项

问题描述

我有一个 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)

解决方法

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