daniele77 / cli

A library for interactive command line interfaces in modern C++
Boost Software License 1.0
1.23k stars 140 forks source link

Added check for CMAKE_SKIP_INSTALL_RULES #160

Closed EvanMcBroom closed 2 years ago

EvanMcBroom commented 2 years ago

CMake's FetchContent module allows people to include your library in their project directly without using an external library manager (ex. vcpkg or conan). Here is an example for doing that:

include(FetchContent)
FetchContent_Declare(
  cli
  GIT_REPOSITORY https://github.com/daniele77/cli.git
  GIT_TAG v2.0.2
)
FetchContent_MakeAvailable(cli)

add_executable(main-project)
target_link_libraries(main-project PRIVATE cli::cli)

The only issue with using FetchContent is that the cli library will attempt to add install steps regardless of it is the main project or not. CMake allows you to disable the install steps by temporarily setting the CMAKE_SKIP_INSTALL_RULES variable to ON, but that makes CMake generate a nasty warning message:

CMake Warning in CMakeLists.txt:
  CMAKE_SKIP_INSTALL_RULES was enabled even though installation rules have
  been specified

This is a known issue with CMake (issue #22561) which does not appear like it will be fixed anytime soon. The current fix for FetchContent users is to guard a library's install steps with a check for CMAKE_SKIP_INSTALL_RULES:

if(NOT CMAKE_SKIP_INSTALL_RULES)
  install(...)
endif()

This pull request adds that check which allows the library to be integrated using FetchContent without having additional warning messages appear.

daniele77 commented 2 years ago

Great contribution, thank you very much.

EvanMcBroom commented 2 years ago

Thanks @daniele77! 🙂