From e005d076568ea7a6d1979a8f80a988728e136d5a Mon Sep 17 00:00:00 2001 From: Mario Badr Date: Sat, 3 Dec 2016 07:44:46 +1100 Subject: [PATCH] Use cmake interface library Fixes #33. This PR uses cmake's interface library feature: An INTERFACE library target does not directly create build output, though it may have properties set on it and it may be installed, exported and imported. This makes it easier to include the header only library in a cmake project. After using add_subdirectory on the cxxopts directory, one simply needs to include cxxopts in their target_link_libraries, which will allow the user's target to inherit the properties of the cxxopts header library (see changes to example and test). --- CMakeLists.txt | 21 +++++++++++++++++---- {src => include}/cxxopts.hpp | 0 src/CMakeLists.txt | 7 ++----- test/CMakeLists.txt | 3 +-- test/options.cpp | 2 +- 5 files changed, 21 insertions(+), 12 deletions(-) rename {src => include}/cxxopts.hpp (100%) diff --git a/CMakeLists.txt b/CMakeLists.txt index 1adc963..2d3d132 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -26,7 +26,7 @@ RETURN() ENDIF() -cmake_minimum_required(VERSION 2.8.12) +cmake_minimum_required(VERSION 3.1) project(cxxopts) enable_testing() @@ -37,9 +37,7 @@ option(CXXOPTS_BUILD_EXAMPLES "Set to ON to build examples" ON) option(CXXOPTS_BUILD_TESTS "Set to ON to build tests" OFF) set(CXXOPTS_LINKER_LIBRARIES "") - set(CXXOPTS_USE_UNICODE_HELP FALSE CACHE BOOL "Use ICU Unicode library") - if(CXXOPTS_USE_UNICODE_HELP) find_package(PkgConfig) @@ -48,8 +46,23 @@ if(CXXOPTS_USE_UNICODE_HELP) set(CXXOPTS_LINKER_LIBRARIES "${ICU_LDFLAGS}") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${ICU_CFLAGS} -DCXXOPTS_USE_UNICODE") - endif() +add_library(cxxopts INTERFACE) +target_sources( + cxxopts INTERFACE + ${CMAKE_CURRENT_SOURCE_DIR}/include/cxxopts.hpp + ) +target_include_directories( + cxxopts INTERFACE + include/ + ) +target_link_libraries( + cxxopts + INTERFACE ${CXXOPTS_LINKER_LIBRARIES} + ) + +install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/include/cxxopts.hpp DESTINATION include) + add_subdirectory(src) add_subdirectory(test) diff --git a/src/cxxopts.hpp b/include/cxxopts.hpp similarity index 100% rename from src/cxxopts.hpp rename to include/cxxopts.hpp diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index fd21e5d..9a79b08 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -19,9 +19,8 @@ # THE SOFTWARE. if(CXXOPTS_BUILD_EXAMPLES) - add_executable(example example.cpp cxxopts.hpp) - - target_link_libraries(example ${CXXOPTS_LINKER_LIBRARIES}) + add_executable(example example.cpp) + target_link_libraries(example cxxopts) if (MSVC) target_compile_options(example PUBLIC /W2) @@ -29,5 +28,3 @@ if(CXXOPTS_BUILD_EXAMPLES) target_compile_options(example PUBLIC -std=c++11 -Wall) endif() endif() - -install(FILES cxxopts.hpp DESTINATION include) diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index 4378e2a..19aa960 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -1,7 +1,6 @@ if (CXXOPTS_BUILD_TESTS) add_executable(options_test options.cpp) - - target_link_libraries(options_test ${CXXOPTS_LINKER_LIBRARIES}) + target_link_libraries(options_test cxxopts) if (MSVC) target_compile_options(options_test PUBLIC /W2) diff --git a/test/options.cpp b/test/options.cpp index c15f6a3..76fad97 100644 --- a/test/options.cpp +++ b/test/options.cpp @@ -3,7 +3,7 @@ #include -#include "../src/cxxopts.hpp" +#include "cxxopts.hpp" class Argv { public: