Skip to content

Commit e40c5c0

Browse files
authored
make install with packaging (#40)
1 parent b0a154d commit e40c5c0

File tree

7 files changed

+114
-13
lines changed

7 files changed

+114
-13
lines changed

.vscode/settings.json

+22-1
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,28 @@
8585
"__verbose_abort": "cpp",
8686
"__threading_support": "cpp",
8787
"ios": "cpp",
88-
"locale": "cpp"
88+
"locale": "cpp",
89+
"charconv": "cpp",
90+
"format": "cpp",
91+
"queue": "cpp",
92+
"stack": "cpp",
93+
"stop_token": "cpp",
94+
"xfacet": "cpp",
95+
"xhash": "cpp",
96+
"xiosbase": "cpp",
97+
"xlocale": "cpp",
98+
"xlocbuf": "cpp",
99+
"xlocinfo": "cpp",
100+
"xlocmes": "cpp",
101+
"xlocmon": "cpp",
102+
"xlocnum": "cpp",
103+
"xloctime": "cpp",
104+
"xmemory": "cpp",
105+
"xstddef": "cpp",
106+
"xstring": "cpp",
107+
"xtr1common": "cpp",
108+
"xtree": "cpp",
109+
"xutility": "cpp"
89110
},
90111
"git.ignoreLimitWarning": true,
91112
"sonarlint.pathToCompileCommands": "${workspaceFolder}/build/compile_commands.json"

CMakeLists.txt

+61-2
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,13 @@
1-
cmake_minimum_required(VERSION 3.4)
1+
cmake_minimum_required(VERSION 3.4...3.28)
22
enable_testing()
33

4-
project(cppparser)
4+
project(cppparser VERSION 1.0.0)
55

66
set(CMAKE_CXX_STANDARD 17)
77
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
88
set(CMAKE_CXX_STANDARD_INCLUDE_DIRECTORIES ${CMAKE_CXX_IMPLICIT_INCLUDE_DIRECTORIES})
99
set(CLANG_TIDY_COMMAND "clang-tidy" "--config-file=${CMAKE_CURRENT_SOURCE_DIR}/.clang-tidy")
10+
set(export_config_name ${PROJECT_NAME})
1011

1112
if(MSVC)
1213
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /wd\"4996\"")
@@ -36,3 +37,61 @@ if(NOT ${MARKDOWN_PP} MATCHES "MARKDOWN_PP-NOTFOUND")
3637
else()
3738
message("Markdown-pp NOT FOUND: README cannot be updated.")
3839
endif()
40+
41+
install(
42+
TARGETS cppast cppparser_lex_and_yacc cppparser cppwriter
43+
EXPORT ${export_config_name}Targets
44+
ARCHIVE DESTINATION "lib" COMPONENT Development
45+
LIBRARY DESTINATION "lib" COMPONENT RuntimeLibraries
46+
LIBRARY DESTINATION "bin" COMPONENT RuntimeLibraries
47+
)
48+
49+
if(NOT DEFINED CPPPARSER_INSTALL_CONFIG_DIR)
50+
set(CPPPARSER_INSTALL_CONFIG_DIR lib/cmake/${export_config_name})
51+
endif()
52+
53+
#------------------------------------------------------------------------------
54+
# Configure <export_config_name>ConfigVersion.cmake common to build and install tree
55+
include(CMakePackageConfigHelpers)
56+
set(config_version_file ${PROJECT_BINARY_DIR}/${export_config_name}ConfigVersion.cmake)
57+
write_basic_package_version_file(
58+
${config_version_file}
59+
VERSION "${CPPPARSER_VERSION}"
60+
COMPATIBILITY ExactVersion
61+
)
62+
63+
#------------------------------------------------------------------------------
64+
# Export '<export_config_name>Targets.cmake' for a build tree
65+
export(
66+
EXPORT ${PROJECT_NAME}Targets
67+
FILE "${CMAKE_CURRENT_BINARY_DIR}/${export_config_name}Targets.cmake"
68+
)
69+
70+
# Configure '<export_config_name>Config.cmake' for a build tree
71+
set(build_config ${CMAKE_BINARY_DIR}/${export_config_name}Config.cmake)
72+
configure_package_config_file(
73+
${export_config_name}Config.cmake.in
74+
${build_config}
75+
INSTALL_DESTINATION "${PROJECT_BINARY_DIR}"
76+
)
77+
78+
#------------------------------------------------------------------------------
79+
# Export '<export_config_name>Targets.cmake' for an install tree
80+
install(
81+
EXPORT ${export_config_name}Targets
82+
FILE ${export_config_name}Targets.cmake
83+
DESTINATION ${CPPPARSER_INSTALL_CONFIG_DIR}
84+
)
85+
86+
set(install_config ${PROJECT_BINARY_DIR}/CMakeFiles/${export_config_name}Config.cmake)
87+
configure_package_config_file(
88+
${export_config_name}Config.cmake.in
89+
${install_config}
90+
INSTALL_DESTINATION ${CPPPARSER_INSTALL_CONFIG_DIR}
91+
)
92+
93+
# Install config files
94+
install(
95+
FILES ${config_version_file} ${install_config}
96+
DESTINATION "${CPPPARSER_INSTALL_CONFIG_DIR}"
97+
)

cppast/CMakeLists.txt

+5-2
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,12 @@ add_library(cppast STATIC
1414
src/cppast.cpp
1515
)
1616
target_include_directories(cppast
17-
PUBLIC
18-
include
17+
PUBLIC
18+
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
19+
$<INSTALL_INTERFACE:${CPPPARSER_INSTALL_INCLUDE_DIR}>
1920
)
2021
set_target_properties(cppast PROPERTIES CXX_CLANG_TIDY "${CLANG_TIDY_COMMAND}")
2122

2223
add_subdirectory(test)
24+
25+
install(DIRECTORY "include/cppast" DESTINATION "include")

cppparser/CMakeLists.txt

+13-5
Original file line numberDiff line numberDiff line change
@@ -51,19 +51,19 @@ add_custom_command(
5151
add_library(cppparser_lex_and_yacc OBJECT
5252
src/parser.l
5353
src/parser.y
54-
src/parser.lex.cpp
55-
src/parser.tab.cpp
54+
${CMAKE_CURRENT_SOURCE_DIR}/src/parser.lex.cpp
55+
${CMAKE_CURRENT_SOURCE_DIR}/src/parser.tab.cpp
5656
)
5757
target_link_libraries(cppparser_lex_and_yacc
5858
PUBLIC
5959
cppast
6060
)
6161
target_include_directories(cppparser_lex_and_yacc
6262
PUBLIC
63-
include
64-
src
65-
../../common/third_party/boost_tp
63+
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
64+
$<INSTALL_INTERFACE:include>
6665
PRIVATE
66+
../../common/third_party/boost_tp
6767
src/win_hack
6868
)
6969
target_compile_definitions(cppparser_lex_and_yacc
@@ -86,4 +86,12 @@ target_link_libraries(cppparser
8686
cppparser_lex_and_yacc
8787
)
8888

89+
target_include_directories(cppparser
90+
PUBLIC
91+
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
92+
$<INSTALL_INTERFACE:include>
93+
)
94+
8995
set_target_properties(cppparser PROPERTIES CXX_CLANG_TIDY "${CLANG_TIDY_COMMAND}")
96+
97+
install(DIRECTORY "include/cppparser" DESTINATION "include" COMPONENT Development)

cppparser/test/CMakeLists.txt

+1-1
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ endif()
55

66
add_definitions(-DBOOST_AUTO_LINK_NOMANGLE)
77

8-
include_directories(../../../common/third_party)
8+
include_directories(../../../common/third_party ../src)
99

1010
add_executable(cppparsertest
1111
app/cppparsertest.cpp

cppparserConfig.cmake.in

+7
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
@PACKAGE_INIT@
2+
3+
set(export_config_name "@export_config_name@")
4+
5+
set_and_check(${export_config_name}_TARGETS "${CMAKE_CURRENT_LIST_DIR}/${export_config_name}Targets.cmake")
6+
7+
include(${${export_config_name}_TARGETS})

cppwriter/CMakeLists.txt

+5-2
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,14 @@ set(CPP_WRITER_SOURCES
55
add_library(cppwriter STATIC ${CPP_WRITER_SOURCES})
66

77
target_include_directories(cppwriter
8-
PUBLIC
9-
include
8+
PUBLIC
9+
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
10+
$<INSTALL_INTERFACE:include>
1011
)
1112
target_link_libraries(cppwriter
1213
PUBLIC
1314
cppast
1415
)
1516
set_target_properties(cppwriter PROPERTIES CXX_CLANG_TIDY "${CLANG_TIDY_COMMAND}")
17+
18+
install(DIRECTORY "include/cppwriter" DESTINATION "include")

0 commit comments

Comments
 (0)