Skip to content

find_package(ament_cmake_core) call defines uninstall target in non-ament CMake packages #427

Open
@traversaro

Description

@traversaro

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't workinghelp wantedExtra attention is needed

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions