Skip to content

Commit 3fd9ae6

Browse files
committed
Refactor to install(DIRECTORY) instead of PUBLIC_HEADERS and fix bug when MYLIB_SHARED_LIBS is not properly applied during build
1 parent ffb88f5 commit 3fd9ae6

File tree

2 files changed

+16
-17
lines changed

2 files changed

+16
-17
lines changed

CMakeLists.txt

Lines changed: 15 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -3,19 +3,16 @@ project(mylib
33
VERSION 1.0.0
44
DESCRIPTION "Template for C++ library built with CMake"
55
LANGUAGES CXX)
6-
include(cmake/utils.cmake)
7-
8-
add_library(mylib) # initialized below
9-
add_library(mylib::mylib ALIAS mylib)
10-
11-
string(COMPARE EQUAL "${CMAKE_SOURCE_DIR}" "${CMAKE_CURRENT_SOURCE_DIR}" is_top_level)
126

137
#----------------------------------------------------------------------------------------------------------------------
148
# general settings and options
159
#----------------------------------------------------------------------------------------------------------------------
1610

11+
include(cmake/utils.cmake)
1712
include(GNUInstallDirs)
1813

14+
string(COMPARE EQUAL "${CMAKE_SOURCE_DIR}" "${CMAKE_CURRENT_SOURCE_DIR}" is_top_level)
15+
1916
# MYLIB_SHARED_LIBS option (undefined by default) can be used to force shared/static build
2017
option(MYLIB_BUILD_TESTS "Build mylib tests" OFF)
2118
option(MYLIB_BUILD_EXAMPLES "Build mylib examples" OFF)
@@ -36,6 +33,9 @@ endif()
3633
set_if_undefined(CMAKE_CXX_VISIBILITY_PRESET hidden)
3734
set_if_undefined(CMAKE_VISIBILITY_INLINES_HIDDEN ON)
3835

36+
add_library(mylib) # initialized below
37+
add_library(mylib::mylib ALIAS mylib)
38+
3939
#----------------------------------------------------------------------------------------------------------------------
4040
# mylib dependencies
4141
#----------------------------------------------------------------------------------------------------------------------
@@ -55,17 +55,12 @@ endif()
5555

5656
generate_export_header(mylib EXPORT_FILE_NAME include/mylib/${export_file_name})
5757

58-
set(public_headers
59-
include/mylib/export.h
60-
include/mylib/mylib.h)
6158
set(sources
62-
${public_headers}
59+
include/mylib/export.h
60+
include/mylib/mylib.h
6361
src/mylib.cpp)
6462
source_group(TREE "${CMAKE_CURRENT_SOURCE_DIR}" FILES ${sources})
6563

66-
list(APPEND public_headers "${CMAKE_CURRENT_BINARY_DIR}/include/mylib/${export_file_name}")
67-
list(APPEND sources "${CMAKE_CURRENT_BINARY_DIR}/include/mylib/${export_file_name}")
68-
6964
#----------------------------------------------------------------------------------------------------------------------
7065
# mylib target
7166
#----------------------------------------------------------------------------------------------------------------------
@@ -84,7 +79,6 @@ target_include_directories(mylib
8479
"${CMAKE_CURRENT_SOURCE_DIR}/src")
8580

8681
set_target_properties(mylib PROPERTIES
87-
PUBLIC_HEADER "${public_headers}"
8882
SOVERSION ${PROJECT_VERSION_MAJOR}
8983
VERSION ${PROJECT_VERSION})
9084

@@ -98,8 +92,13 @@ if(MYLIB_INSTALL AND NOT CMAKE_SKIP_INSTALL_RULES)
9892
install(TARGETS mylib EXPORT mylib_export
9993
RUNTIME COMPONENT mylib
10094
LIBRARY COMPONENT mylib NAMELINK_COMPONENT mylib-dev
101-
ARCHIVE COMPONENT mylib-dev
102-
PUBLIC_HEADER COMPONENT mylib-dev DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/mylib")
95+
ARCHIVE COMPONENT mylib-dev)
96+
install(DIRECTORY include/
97+
COMPONENT mylib-dev
98+
DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}")
99+
install(FILES "${CMAKE_CURRENT_BINARY_DIR}/include/mylib/${export_file_name}"
100+
COMPONENT mylib-dev
101+
DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/mylib")
103102

104103
set(targets_file "mylib-shared-targets.cmake")
105104

include/mylib/mylib.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,4 +5,4 @@
55
namespace mylib {
66

77
MYLIB_EXPORT int add(int a, int b);
8-
}
8+
} // namespace mylib

0 commit comments

Comments
 (0)