Description
It seems that any call to find_package(ament_cmake_core)
, even if a non-ament project, defines a uninstall
target, that may interfere with existing targets. In general, it is probably not expected by users that just a find_package
call can define targets. This is even more confusing if ament_cmake_core
is not included directly, but as a dependency when a find_package for a different project is called, for example find_package(rclcpp)
.
Minimal Reproducible Example
I prepared a MRE in https://github.com/traversaro/mre-rclcpp-uninstall .
In it, there is a minimal project that only installs an empty file, and defines the uninstall
target according to CMake guidelines (https://gitlab.kitware.com/cmake/community/-/wikis/FAQ#can-i-do-make-uninstall-with-cmake). In a subdirectory then, find_package(ament_cmake_core)
is called. Due to the call to find_package(ament_cmake_core)
, make uninstall
fails:
(roshumble) traversaro@IITICUBLAP257:~/mre-rclcpp-uninstall$ git clone https://github.com/traversaro/mre-rclcpp-uninstall
(roshumble) traversaro@IITICUBLAP257:~/mre-rclcpp-uninstall$ cd mre-rclcpp-uninstall
(roshumble) traversaro@IITICUBLAP257:~/mre-rclcpp-uninstall$ mkdir build_with_rclcpp
(roshumble) traversaro@IITICUBLAP257:~/mre-rclcpp-uninstall$ cd build_with_rclcpp/
(roshumble) traversaro@IITICUBLAP257:~/mre-rclcpp-uninstall/build_with_rclcpp$ cmake -DCMAKE_INSTALL_PREFIX=./install -DUSES_RCLCPP:BOOL=ON ..
-- The C compiler identification is GNU 11.3.0
-- The CXX compiler identification is GNU 11.3.0
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working C compiler: /usr/bin/cc - skipped
-- Detecting C compile features
-- Detecting C compile features - done
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Check for working CXX compiler: /usr/bin/c++ - skipped
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Found ament_cmake_core: 1.3.3 (/home/traversaro/mambaforge/envs/roshumble/share/ament_cmake_core/cmake)
-- Found Python3: /home/traversaro/mambaforge/envs/roshumble/bin/python3.10 (found version "3.10.8") found components: Interpreter
-- Not defining top-level uninstall target as it is already defined
-- Configuring done
-- Generating done
-- Build files have been written to: /home/traversaro/mre-rclcpp-uninstall/build_no_rclcpp
(roshumble) traversaro@IITICUBLAP257:~/mre-rclcpp-uninstall/build_with_rclcpp$ make install
Install the project...
-- Install configuration: ""
-- Installing: /home/traversaro/mre-rclcpp-uninstall/build_with_rclcpp/install/share/MREUninstallTarget/empty.file
(roshumble) traversaro@IITICUBLAP257:~/mre-rclcpp-uninstall/build_with_rclcpp$ make uninstall
CMake Error at ament_cmake_uninstall_target/ament_cmake_uninstall_target.cmake:34 (message):
Cannot find install manifest:
/home/traversaro/mre-rclcpp-uninstall/build_with_rclcpp/subdir/install_manifest.txt
make[3]: *** [subdir/CMakeFiles/MREUninstallTarget_uninstall.dir/build.make:70: subdir/CMakeFiles/MREUninstallTarget_uninstall] Error 1
make[2]: *** [CMakeFiles/Makefile2:125: subdir/CMakeFiles/MREUninstallTarget_uninstall.dir/all] Error 2
make[1]: *** [CMakeFiles/Makefile2:106: subdir/CMakeFiles/uninstall.dir/rule] Error 2
make: *** [Makefile:169: uninstall] Error 2
We can see that if find_package(ament_cmake_core)
is not called (via -DUSES_RCLCPP:BOOL=OFF
), everything works as expected:
(roshumble) traversaro@IITICUBLAP257:~/mre-rclcpp-uninstall$ git clone https://github.com/traversaro/mre-rclcpp-uninstall
(roshumble) traversaro@IITICUBLAP257:~/mre-rclcpp-uninstall$ cd mre-rclcpp-uninstall
(roshumble) traversaro@IITICUBLAP257:~/mre-rclcpp-uninstall$ mkdir build_no_rclcpp
(roshumble) traversaro@IITICUBLAP257:~/mre-rclcpp-uninstall$ cd build_no_rclcpp/
(roshumble) traversaro@IITICUBLAP257:~/mre-rclcpp-uninstall/build_no_rclcpp$ cmake -DCMAKE_INSTALL_PREFIX=./install -DUSES_RCLCPP:BOOL=OFF ..
-- The C compiler identification is GNU 11.3.0
-- The CXX compiler identification is GNU 11.3.0
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working C compiler: /home/traversaro/mambaforge/envs/roshumble/bin/x86_64-conda-linux-gnu-cc - skipped
-- Detecting C compile features
-- Detecting C compile features - done
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Check for working CXX compiler: /home/traversaro/mambaforge/envs/roshumble/bin/x86_64-conda-linux-gnu-c++ - skipped
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Defining top-level uninstall target
-- Configuring done
-- Generating done
-- Build files have been written to: /home/traversaro/mre-rclcpp-uninstall/build_no_rclcpp
(roshumble) traversaro@IITICUBLAP257:~/mre-rclcpp-uninstall/build_no_rclcpp$ make install
Install the project...
-- Install configuration: ""
-- Installing: /home/traversaro/mre-rclcpp-uninstall/build_no_rclcpp/install/share/MREUninstallTarget/empty.file
(roshumble) traversaro@IITICUBLAP257:~/mre-rclcpp-uninstall/build_no_rclcpp$ make uninstall
-- Uninstalling /home/traversaro/mre-rclcpp-uninstall/build_no_rclcpp/install/share/MREUninstallTarget/empty.file
Built target uninstall