osrm-backend icon indicating copy to clipboard operation
osrm-backend copied to clipboard

osrm is not a good fetch content citizen

Open ctriley opened this issue 3 months ago • 0 comments

Issue

OSRM adds generic, unprefixed targets like uninstall

add_custom_target(uninstall
    COMMAND ${CMAKE_COMMAND} -P ${CMAKE_CURRENT_BINARY_DIR}/cmake/cmake_uninstall.cmake)

This can clash with other projects who also are not good citizens, causing build issues for downstream projects.


Proposed fix: Add osrm_ prefix to build targets.

To be a good add_subdirectory or FetchContent citizen, however, it is not enough to simply namespace your targets as SomeProj_Target; you must also provide an ALIAS target SomeProj::Target. There are a few reasons for this:

Your imported targets from find_package will almost certainly be named SomeProj::Target. It should be possible for consumers of your library to switch between FetchContent and find_package easily, without changing other parts of their code. The ALIAS target lets you expose the same interface in both cases. This will become especially pressing when CMake 3.24 lands with its new find_package-to-FetchContent redirection features.

CMake's target_link_libraries function treats names that contain :: as target names always and will throw configure-time error if the target does not exist. Without the ::, it will be treated as a target preferentially, but will turn into a linker flag if the target doesn't exist. Thus, it is preferable to link to targets with :: in their names.

Yet, only IMPORTED and ALIAS targets may have :: in their names.

ctriley avatar Nov 03 '25 18:11 ctriley