Skip to content

Commit

Permalink
make Foo and Bar OBJECT library
Browse files Browse the repository at this point in the history
  • Loading branch information
Mizux committed Sep 13, 2023
1 parent 14fca23 commit e385538
Show file tree
Hide file tree
Showing 6 changed files with 48 additions and 15 deletions.
3 changes: 2 additions & 1 deletion Bar/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
add_library(Bar "")
add_library(Bar OBJECT)

target_sources(Bar
PRIVATE
Expand All @@ -11,6 +11,7 @@ target_include_directories(Bar
target_compile_features(Bar PUBLIC cxx_std_20)
set_target_properties(Bar PROPERTIES
VERSION ${PROJECT_VERSION}
POSITION_INDEPENDENT_CODE ON
PUBLIC_HEADER include/bar/Bar.hpp)
#target_link_libraries(Bar PUBLIC ...)
add_library(${PROJECT_NAMESPACE}::Bar ALIAS Bar)
Expand Down
3 changes: 2 additions & 1 deletion Foo/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
add_library(Foo)
add_library(Foo OBJECT)
target_sources(Foo
PRIVATE
include/foo/Foo.hpp
Expand All @@ -10,6 +10,7 @@ target_include_directories(Foo
target_compile_features(Foo PUBLIC cxx_std_20)
set_target_properties(Foo PROPERTIES
VERSION ${PROJECT_VERSION}
POSITION_INDEPENDENT_CODE ON
PUBLIC_HEADER include/foo/Foo.hpp)
#target_link_libraries(Foo PUBLIC ...)
add_library(${PROJECT_NAMESPACE}::Foo ALIAS Foo)
Expand Down
10 changes: 4 additions & 6 deletions FooBar/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
add_library(FooBar "")
add_library(FooBar OBJECT)

target_sources(FooBar
PRIVATE
Expand All @@ -7,6 +7,8 @@ target_sources(FooBar
target_include_directories(FooBar
PUBLIC
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/../Bar/include>
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/../Foo/include>
$<INSTALL_INTERFACE:include>)
target_compile_features(FooBar PUBLIC cxx_std_20)
set_target_properties(FooBar PROPERTIES
Expand All @@ -18,13 +20,9 @@ if(APPLE)
INSTALL_RPATH "@loader_path")
elseif(UNIX)
set_target_properties(FooBar PROPERTIES
POSITION_INDEPENDENT_CODE ON
INSTALL_RPATH "$ORIGIN")
endif()
target_link_libraries(FooBar
PRIVATE
${PROJECT_NAMESPACE}::Foo
${PROJECT_NAMESPACE}::Bar
)
add_library(${PROJECT_NAMESPACE}::FooBar ALIAS FooBar)

add_subdirectory(tests)
Expand Down
7 changes: 6 additions & 1 deletion FooBarApp/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,10 @@ add_executable(FooBarApp)
target_sources(FooBarApp
PRIVATE
src/main.cpp)
target_include_directories(FooBarApp
PRIVATE
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/../FooBar/include>
)
target_compile_features(FooBarApp PRIVATE cxx_std_20)
set_target_properties(FooBarApp PROPERTIES
VERSION ${PROJECT_VERSION})
Expand All @@ -13,7 +17,8 @@ elseif(UNIX AND NOT APPLE)
set_target_properties(FooBarApp PROPERTIES
INSTALL_RPATH "$ORIGIN/../${CMAKE_INSTALL_LIBDIR}")
endif()
target_link_libraries(FooBarApp PRIVATE ${PROJECT_NAMESPACE}::FooBar)
target_link_libraries(FooBarApp PRIVATE Full)

add_executable(${PROJECT_NAMESPACE}::FooBarApp ALIAS FooBarApp)

if(BUILD_TESTING)
Expand Down
5 changes: 2 additions & 3 deletions ci/samples/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -11,9 +11,8 @@ set_target_properties(sample PROPERTIES
CXX_STANDARD_REQUIRED ON
VERSION ${PROJECT_VERSION})
target_link_libraries(sample PRIVATE
CMakeCpp::Foo
CMakeCpp::Bar
CMakeCpp::FooBar)
CMakeCpp::Full
)

if(BUILD_TESTING)
add_test(NAME sample_UT COMMAND sample)
Expand Down
35 changes: 32 additions & 3 deletions cmake/cpp.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -92,6 +92,36 @@ endfunction()
add_subdirectory(Foo)
add_subdirectory(Bar)
add_subdirectory(FooBar)

add_library(Full)
target_include_directories(Full
PUBLIC
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/Foo/include>
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/Bar/include>
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/FooBar/include>
$<INSTALL_INTERFACE:include>)
#target_link_libraries(Full INTERFACE
# Xcode fails to build if library doesn't contains at least one source file.
if(XCODE)
file(GENERATE
OUTPUT ${PROJECT_BINARY_DIR}/${PROJECT_NAME}/version.cpp
CONTENT "namespace {char* version = \"${PROJECT_VERSION}\";}")
target_sources(Full PRIVATE ${PROJECT_BINARY_DIR}/${PROJECT_NAME}/version.cpp)
endif()
target_sources(Full PRIVATE
$<TARGET_OBJECTS:Bar>
$<TARGET_OBJECTS:Foo>
$<TARGET_OBJECTS:FooBar>
)
add_library(${PROJECT_NAMESPACE}::Full ALIAS Full)
install(TARGETS Full
EXPORT ${PROJECT_NAME}Targets
PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/foobar
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
#RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
)

add_subdirectory(FooBarApp)

# Install
Expand Down Expand Up @@ -138,9 +168,8 @@ function(add_cpp_example FILE_NAME)
target_include_directories(${EXAMPLE_NAME} PUBLIC ${CMAKE_CURRENT_SOURCE_DIR})
target_compile_features(${EXAMPLE_NAME} PRIVATE cxx_std_20)
target_link_libraries(${EXAMPLE_NAME} PRIVATE
${PROJECT_NAMESPACE}::Foo
${PROJECT_NAMESPACE}::Bar
${PROJECT_NAMESPACE}::FooBar)
${PROJECT_NAMESPACE}::Full
)

include(GNUInstallDirs)
install(TARGETS ${EXAMPLE_NAME})
Expand Down

0 comments on commit e385538

Please sign in to comment.