Skip to content

Commit 426026a

Browse files
committed
improved load-cmdr-cxx.cmake
1 parent 30afc28 commit 426026a

File tree

2 files changed

+34
-94
lines changed

2 files changed

+34
-94
lines changed

README.md

+19-92
Original file line numberDiff line numberDiff line change
@@ -148,6 +148,10 @@ cmake --install build/
148148
# cmake --install build/ --prefix ./dist/install --strip
149149
# sudo cp -R ./dist/install/include/* /usr/local/include/
150150
# sudo cp -R ./dist/install/lib/cmake/cmdr11 /usr/local/lib/cmake/
151+
#
152+
# macOS users could install to Homebrew directly without super privilidges:
153+
# cmake --install build/ --prefix $(brew --prefix) --strip
154+
#
151155
rm -rf ./build
152156
cd ..
153157
```
@@ -202,107 +206,30 @@ For more information, please refer to the chapter [Others](#others).
202206
203207
#### CMake ExternalProject
204208
205-
Adding cmdr11 with `ExternalProject` is possible. A `deps-cmdr11.cmake` could be:
206-
207-
```cmake
208-
#
209-
# FOR CMDR11
210-
#
211-
212-
# message(STATUS "cmdr-cxx: defined macro add_cmdr_cxx_to")
213-
macro(add_cmdr_cxx_to target)
214-
find_package(cmdr11)
215-
216-
set(CMDR_CXX_STAGE_DIR "${CMAKE_CURRENT_BINARY_DIR}/cmdr-cxx-stage")
217-
218-
option(CMAKE_VERBOSE_DEBUG "for cmdr-cxx, enable CMAKE_VERBOSE_MAKEFILE to print command line before execute them" OFF)
219-
option(CMDR_NO_3RDPARTY "for cmdr-cxx, disable source codes and targets alternate to yaml-cpp and others" ON)
220-
221-
if(${CMDR11_FOUND})
222-
message(STATUS "cmdr-cxx: package FOUND at ${CMDR11_INCLUDE_DIR}, ${CMDR11_VERSION}")
223-
message(STATUS "cmdr-cxx: add cmdr-cxx v${CMDR11_VERSION_STRING} module to '${target}' from CMake Modules registry.")
224-
target_link_libraries(${target}
225-
PRIVATE
226-
${CMDR11_LIBRARIES}
227-
)
228-
else()
229-
message(STATUS "cmdr-cxx: not found, try pulling a local one...")
230-
231-
set(CMDR_CXX_TGT_NAME "third-cmdr-cxx")
232-
include(ExternalProject)
233-
ExternalProject_Add(${CMDR_CXX_TGT_NAME}
234-
GIT_REPOSITORY https://github.com/hedzr/cmdr-cxx
235-
GIT_TAG origin/master # v0.3.13
236-
GIT_SHALLOW 1
237-
GIT_PROGRESS ON
238-
239-
# STEP_TARGETS build
240-
# SOURCE_DIR "${PROJECT_SOURCE_DIR}/third-party/cmdr-cxx-src"
241-
# BINARY_DIR "${CMAKE_CURRENT_BINARY_DIR}/cmdr-cxx-build"
242-
CMAKE_ARGS
243-
-DCMAKE_VERBOSE_DEBUG:BOOL=${CMAKE_VERBOSE_DEBUG}
244-
-DCMDR_NO_3RDPARTY:BOOL=${CMDR_NO_3RDPARTY}
245-
-DENABLE_TESTS:BOOL=OFF
246-
-DENABLE_CLI_APP:BOOL=OFF
247-
-DENABLE_AUTOMATE_TESTS:BOOL=OFF
248-
-DBUILD_DOCUMENTATION:BOOL=OFF
249-
-DBUILD_EXAMPLES:BOOL=OFF
250-
--no-warn-unused-cli
251-
-DCMAKE_BUILD_TYPE:STRING=${CMAKE_BUILD_TYPE}
252-
-DCMAKE_INSTALL_PREFIX:PATH=${CMDR_CXX_STAGE_DIR}
253-
254-
# -DCMAKE_INSTALL_PREFIX:PATH=${CMAKE_INSTALL_PREFIX}
255-
# -DCMAKE_INSTALL_PREFIX:PATH=${EXECUTABLE_OUTPUT_PATH}
256-
BUILD_COMMAND ${CMAKE_COMMAND} -E echo "[cmdr-cxx] Starting $<CONFIG> build, install_prefix: ${CMAKE_INSTALL_PREFIX} or ${CMDR_CXX_STAGE_DIR}, BINARY_DIR: <BINARY_DIR>"
257-
258-
# COMMAND ${CMAKE_COMMAND} -E sudo "chmod a+w /usr/local/lib"
259-
COMMAND ${CMAKE_COMMAND} --build <BINARY_DIR> --config $<CONFIG>
260-
COMMAND ${CMAKE_COMMAND} -E echo "[cmdr-cxx] $<CONFIG> build complete"
261-
)
262-
263-
message(STATUS "cmdr-cxx: add '${CMDR_CXX_TGT_NAME}' module to '${target}' from building dir.")
264-
message(STATUS "cmdr-cxx: CI_RUNNING = $ENV{CI_RUNNING}")
265-
message(STATUS "cmdr-cxx: add_dependencies")
266-
add_dependencies(${target} ${CMDR_CXX_TGT_NAME})
267-
268-
set(CMDR11_INCLUDE_DIR ${CMDR_CXX_STAGE_DIR}/include)
269-
set(CMDR11_LIB_DIR ${CMDR_CXX_STAGE_DIR}/lib)
270-
endif()
271-
272-
target_include_directories(${target} PRIVATE
273-
$<BUILD_INTERFACE:${CMAKE_GENERATED_DIR}>
274-
$<INSTALL_INTERFACE:include>
275-
/usr/local/include
276-
/opt/homebrew/include
277-
278-
# ${CMDR_CXX_STAGE_DIR}/include
279-
${CMDR11_INCLUDE_DIR}
280-
)
281-
target_link_directories(${target} PRIVATE
282-
/usr/local/lib
283-
284-
# ${CMDR_CXX_STAGE_DIR}/lib
285-
${CMDR11_LIBRARY_DIR}
209+
Adding cmdr11 with `ExternalProject` is possible. A `load-cmdr-cxx.cmake` was provided to make integrating `cmdr-cxx` easier.
286210
287-
# ${CMAKE_CURRENT_BINARY_DIR}/${CMDR_CXX_TGT_NAME}-prefix/src/${CMDR_CXX_TGT_NAME}-build
288-
)
289-
message(STATUS "cmdr-cxx: include-dir = ${CMDR11_INCLUDE_DIR}")
290-
endmacro()
291-
```
292-
293-
And the only things you need to do in your CMakeLists.txt are:
211+
Extract `cmake/load-cmdr-cxx.cmake` into your project, load it and use `add-cmdr-cxx-to` macro. For example, your cli-app could be:
294212
295213
```cmake
214+
# define_cxx_executable_project(myapp
215+
# PREFIX myapp
216+
# LIBRARIES ${myapp_libs}
217+
# SOURCES ${myapp_source_files}
218+
# INCLUDE_DIRECTORIES ${myapp_INCDIR}
219+
# )
220+
# enable_version_increaser(myapp-cli myapp my MY_)
221+
296222
project(cmdr-cli-demo)
297223
add_executable(${PROJECT_NAME} cmdr_main.cc)
298224
target_include_directories(${PROJECT_NAME} PRIVATE
299225
$<BUILD_INTERFACE:${CMAKE_GENERATED_DIR}>
300226
)
301-
include(deps-cmdr11) # include our deps-cmdr11.cmake
302-
add_cmdr_cxx_to(${PROJECT_NAME})
227+
228+
include(load-cmdr-cxx) # load ME here.
229+
add_cmdr_cxx_to(myapp) # attach cmdr11::cmdr11
303230
```
304231
305-
That's all.
232+
It works.
306233

307234
### Integrate to your cmake script
308235

@@ -321,7 +248,7 @@ set_target_properties(${PROJECT_NAME} PROPERTIES
321248
)
322249
```
323250

324-
Or you can download [deps-cmdr11.cmake](https://github.com/hedzr/cmdr-cxx/blob/master/cmake/deps-cmdr11.cmake) and
251+
Or you can download [load-cmdr-cxx.cmake](https://github.com/hedzr/cmdr-cxx/blob/master/cmake/load-cmdr-cxx.cmake) and
325252
include it:
326253

327254
```cmake

cmake/deps-cmdr11.cmake renamed to cmake/load-cmdr-cxx.cmake

+15-2
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,18 @@
11
#
2-
# FOR CMDR11
2+
# TO LOADING CMDR11 / CMDR-CXX EASILY:
3+
#
4+
# define_cxx_executable_project(myapp
5+
# PREFIX myapp
6+
# LIBRARIES ${myapp_libs}
7+
# SOURCES ${myapp_source_files}
8+
# INCLUDE_DIRECTORIES ${myapp_INCDIR}
9+
# )
10+
# enable_version_increaser(myapp-cli myapp my MY_)
11+
#
12+
# include(load-cmdr-cxx) # load ME here.
13+
# add_cmdr_cxx_to(myapp) # attach cmdr11::cmdr11
14+
#
15+
316
#
417

518
# message(STATUS "cmdr-cxx: defined macro add_cmdr_cxx_to")
@@ -15,7 +28,7 @@ macro(add_cmdr_cxx_to target)
1528
message(STATUS "cmdr-cxx: package FOUND at ${CMDR11_INCLUDE_DIR}, ${CMDR11_VERSION}")
1629
message(STATUS "cmdr-cxx: add cmdr-cxx v${CMDR11_VERSION_STRING} module to '${target}' from CMake Modules registry.")
1730
target_link_libraries(${target}
18-
PRIVATE
31+
# PRIVATE
1932
${CMDR11_LIBRARIES}
2033
)
2134
else()

0 commit comments

Comments
 (0)