运行`catkin_make clean`时,外部项目的清理目标出现问题

问题描述

我的存储库中有很多软件包,我的某些软件包是通过以下方式安装的(我的自定义ROS软件包之一的CMakeLists.txt文件的片段):

include(ExternalProject)
ExternalProject_Add(<PACKAGE_NAME>
    SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/<SOME_PATH>
    CONfigURE_COMMAND ""
    BUILD_IN_SOURCE 1
    BUILD_COMMAND $(MAKE)
    INSTALL_COMMAND $(MAKE) DESTDIR=${<PACKAGE>_DESTDIR} install
)

这在使用catkin_make进行编译时效果很好,但是如果我尝试使用catkin_make clean运行clean目标,则不会清理我使用external安装的项目。再次使用catkin_make进行编译时会导致问题。

有什么办法可以解决这个问题?我阅读了catkin_make的所有源代码,但确定干净的目标似乎完全由cmake完成。

解决方法

如果您希望将外部项目一次又一次地构建(并清理)为项目的一部分,请使用add_subdirectory而不是ExternalProject_Add包含它

如果您使用add_subdirectory将其包含在构建系统中,那么当您调用catkin_make clean时,它将被清除