问题描述
我有一个 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 解决了问题!