强制CMake在执行任何其他操作之前执行代码生成器
我似乎无法理解这一点。我用的是柳絮。基本上我想生成一个rqt_配置GUI 但是,我想自动生成配置文件和消息文件。所以我写了一个发电机。使用强制CMake在执行任何其他操作之前执行代码生成器,cmake,ros,catkin,Cmake,Ros,Catkin,我似乎无法理解这一点。我用的是柳絮。基本上我想生成一个rqt_配置GUI 但是,我想自动生成配置文件和消息文件。所以我写了一个发电机。使用add\u custom\u target我成功地获得了名为: add_custom_target( generate ALL WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} BYPRODUCTS cfg/${PROJECT_NAME}.cfg msg/${PROJECT_NAME}.msg
add\u custom\u target
我成功地获得了名为:
add_custom_target(
generate ALL
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
BYPRODUCTS cfg/${PROJECT_NAME}.cfg msg/${PROJECT_NAME}.msg launch/${PROJECT_NAME}.launch scripts/callback.py
COMMAND rosrun my_generator my_generator.pc
)
一旦我尝试使用生成的代码catkin构建失败:
generate_dynamic_reconfigure_options(
cfg/${PROJECT_NAME}.cfg
)
add_message_files(
FILES ${PROJECT_NAME}.msg
)
generate_messages(
DEPENDENCIES
)
它说,add\u message\u files
找不到生成的文件,并且不生成文件,即使前面有add\u custom\u target
我只想确保首先运行add\u custom\u target
我读到的关于确保订单的所有内容都说我应该使用add_depencies(generate),但是我不知道要附加到哪个目标来抢占这些宏。看起来
add_message_files
希望在配置阶段,当CMake处理CMakeLists.txt
时立即查看文件。但是,add\u custom\u target
仅在构建阶段执行其命令
您需要立即运行生成器,改为使用:
(传递额外的
RESULT\u变量
选项可能很有用,因此可以检查命令调用是否成功)。以任何形式,在编译阶段执行add\u custom\u目标
/add\u custom\u命令
,这是在解析CMakeLists.txt
的配置阶段之后执行的。但是,add_message_files
似乎希望在配置阶段立即查看该文件。因此,您需要使用execute\u process
创建文件,该文件也会立即执行。@Tsyvarev谢谢!它现在似乎起作用了。由于某种原因,我以前试过Excel程序,但它根本没有产生。如果你有一个工作解决方案,请考虑写一个快速回答邮件,并标记为接受。@ ScasRektTeles你是指我还是Tsyvarev?我不想盗取他的分数。@CodeMonkey请自己发布一个!
execute_process(
COMMAND rosrun my_generator my_generator.pc
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
)