Skip to content

Commit e5967da

Browse files
committed
Bar: use add_cxx_library
1 parent 921410d commit e5967da

File tree

2 files changed

+43
-43
lines changed

2 files changed

+43
-43
lines changed

Bar/CMakeLists.txt

Lines changed: 11 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -1,33 +1,14 @@
1-
add_library(Bar)
2-
target_sources(Bar
3-
PRIVATE
1+
add_cxx_library(
2+
NAME
3+
Bar
4+
HEADERS
45
include/bar/Bar.hpp
5-
src/Bar.cpp)
6-
target_include_directories(Bar
7-
PUBLIC
8-
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
9-
$<INSTALL_INTERFACE:include>)
10-
target_compile_features(Bar PUBLIC cxx_std_20)
11-
set_target_properties(Bar PROPERTIES
12-
VERSION ${PROJECT_VERSION}
13-
POSITION_INDEPENDENT_CODE ON
14-
PUBLIC_HEADER include/bar/Bar.hpp)
15-
if(APPLE)
16-
set_target_properties(Bar PROPERTIES INSTALL_RPATH "@loader_path")
17-
elseif(UNIX)
18-
set_target_properties(Bar PROPERTIES INSTALL_RPATH "$ORIGIN")
19-
endif()
20-
target_link_libraries(Bar PRIVATE absl::log)
21-
add_library(${PROJECT_NAMESPACE}::Bar ALIAS Bar)
6+
SOURCES
7+
src/Bar.cpp
8+
LINK_LIBRARIES
9+
absl::log
10+
INSTALL_DIR
11+
bar
12+
)
2213

2314
add_subdirectory(tests)
24-
25-
# Install
26-
include(GNUInstallDirs)
27-
install(TARGETS Bar
28-
EXPORT ${PROJECT_NAME}Targets
29-
PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/bar
30-
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
31-
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
32-
#RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
33-
)

cmake/cpp.cmake

Lines changed: 32 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -128,6 +128,8 @@ endfunction()
128128
# add_cxx_library(
129129
# NAME
130130
# foo
131+
# HEADERS
132+
# foo.h
131133
# SOURCES
132134
# foo.cc
133135
# ${PROJECT_SOURCE_DIR}/Foo/foo.cc
@@ -140,9 +142,9 @@ endfunction()
140142
# )
141143
function(add_cxx_library)
142144
set(options "TESTING")
143-
set(oneValueArgs "NAME;TYPE")
145+
set(oneValueArgs "NAME;TYPE;INSTALL_DIR")
144146
set(multiValueArgs
145-
"SOURCES;COMPILE_DEFINITIONS;COMPILE_OPTIONS;LINK_LIBRARIES;LINK_OPTIONS")
147+
"HEADERS;SOURCES;COMPILE_DEFINITIONS;COMPILE_OPTIONS;LINK_LIBRARIES;LINK_OPTIONS")
146148
cmake_parse_arguments(LIBRARY
147149
"${options}"
148150
"${oneValueArgs}"
@@ -163,29 +165,46 @@ function(add_cxx_library)
163165

164166
add_library(${LIBRARY_NAME} ${LIBRARY_TYPE} "")
165167
if(LIBRARY_TYPE STREQUAL "INTERFACE")
166-
target_include_directories(${LIBRARY_NAME} INTERFACE ${CMAKE_CURRENT_SOURCE_DIR})
168+
target_include_directories(${LIBRARY_NAME} INTERFACE
169+
${CMAKE_CURRENT_SOURCE_DIR}/include)
167170
target_link_libraries(${LIBRARY_NAME} INTERFACE ${LIBRARY_LINK_LIBRARIES})
171+
target_link_options(${LIBRARY_NAME} INTERFACE ${LIBRARY_LINK_OPTIONS})
168172
else()
169-
target_sources(${LIBRARY_NAME} PRIVATE ${LIBRARY_SOURCES})
170-
target_include_directories(${LIBRARY_NAME} PUBLIC ${CMAKE_CURRENT_SOURCE_DIR})
173+
target_include_directories(${LIBRARY_NAME} PUBLIC
174+
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
175+
$<INSTALL_INTERFACE:include>)
176+
)
177+
target_sources(${LIBRARY_NAME} PRIVATE
178+
${LIBRARY_HEADERS}
179+
${LIBRARY_SOURCES}
180+
)
171181
target_compile_definitions(${LIBRARY_NAME} PRIVATE ${LIBRARY_COMPILE_DEFINITIONS})
172182
target_compile_features(${LIBRARY_NAME} PRIVATE cxx_std_20)
173183
target_compile_options(${LIBRARY_NAME} PRIVATE ${LIBRARY_COMPILE_OPTIONS})
174184
target_link_libraries(${LIBRARY_NAME} PUBLIC ${LIBRARY_LINK_LIBRARIES})
175185
target_link_options(${LIBRARY_NAME} PRIVATE ${LIBRARY_LINK_OPTIONS})
176186
endif()
187+
set_target_properties(${LIBRARY_NAME} PROPERTIES
188+
VERSION ${PROJECT_VERSION}
189+
POSITION_INDEPENDENT_CODE ON
190+
PUBLIC_HEADER ${LIBRARY_HEADERS}
191+
)
177192

178-
include(GNUInstallDirs)
179193
if(APPLE)
180-
set_target_properties(${LIBRARY_NAME} PROPERTIES
181-
INSTALL_RPATH "@loader_path/../${CMAKE_INSTALL_LIBDIR};@loader_path")
194+
set_target_properties(${LIBRARY_NAME} PROPERTIES INSTALL_RPATH "@loader_path")
182195
elseif(UNIX)
183-
cmake_path(RELATIVE_PATH CMAKE_INSTALL_FULL_LIBDIR
184-
BASE_DIRECTORY ${CMAKE_INSTALL_FULL_BINDIR}
185-
OUTPUT_VARIABLE libdir_relative_path)
186-
set_target_properties(${LIBRARY_NAME} PROPERTIES
187-
INSTALL_RPATH "$ORIGIN/${libdir_relative_path}:$ORIGIN")
196+
set_target_properties(${LIBRARY_NAME} PROPERTIES INSTALL_RPATH "$ORIGIN")
188197
endif()
198+
199+
# Install
200+
include(GNUInstallDirs)
201+
install(TARGETS ${LIBRARY_NAME}
202+
EXPORT ${PROJECT_NAME}Targets
203+
PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/${LIBRARY_INSTALL_DIR}
204+
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
205+
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
206+
#RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
207+
)
189208
add_library(${PROJECT_NAMESPACE}::${LIBRARY_NAME} ALIAS ${LIBRARY_NAME})
190209
message(STATUS "Configuring library ${LIBRARY_NAME} ...DONE")
191210
endfunction()

0 commit comments

Comments
 (0)