要求
在当前项目中包含一个library库项目,并使用子项目的相关东西。
目录结构树
- cmake_demo
- ├─ CMakeLists.txt
- ├─ domo.tree
- ├─ main.cpp
- └─ sublibrary
- ├─ CMakeLists.txt
- ├─ sublibrary.cpp
- └─ sublibrary.h
-
过程
在main.cpp 中调用子目录内的sublibrary类内的东西,这样方便拓展,也方便迁移。比如sublibrary可直接拿到其他项目内调用。
代码
main 内的 CMakeLists.txt
- cmake_minimum_required(VERSION 3.0.0)
- project(cmake_demo VERSION 0.0.1 LANGUAGES CXX)
-
- # 自动添加CMAKE_CURRENT_BINARY_DIR和CMAKE_CURRENT_SOURCE_DIR到当前处理的CMakeLists.txt
- SET(CMAKE_INCLUDE_CURRENT_DIR ON)
-
- # 添加子项目目录
- add_subdirectory(sublibrary)
-
- # 分别将h和cpp归至变量
- FILE(GLOB SRC_HEADER "*.h")
- FILE(GLOB SRC_SOURCE "*.cpp")
-
- # 添加执行文件
- add_executable(${PROJECT_NAME} ${SRC_HEADER} ${SRC_SOURCE})
-
- # 自动包含目录
- set_property(TARGET ${PROJECT_NAME} PROPERTY
- INTERFACE_INCLUDE_DIRECTORIES
- ${CMAKE_CURRENT_SOURCE_DIR}
- )
-
- # 链接子项目
- target_link_libraries(${PROJECT_NAME} sublibrary)
- target_include_directories(${PROJECT_NAME} PUBLIC ${CMAKE_CURRENT_BINARY_DIR})
-
- set(CPACK_PROJECT_NAME ${PROJECT_NAME})
- set(CPACK_PROJECT_VERSION ${PROJECT_VERSION})
- include(CPack)
sublibrary 内的CMakeLists.txt
- cmake_minimum_required(VERSION 3.0.0)
- project(sublibrary VERSION 0.0.1 LANGUAGES CXX)
-
- # 自动添加CMAKE_CURRENT_BINARY_DIR和CMAKE_CURRENT_SOURCE_DIR到当前处理的CMakeLists.txt
- SET(CMAKE_INCLUDE_CURRENT_DIR ON)
-
- SET(BUILD_SHARED_LIBS ON)
-
- # 分别将h和cpp归至变量
- FILE(GLOB SRC_HEADER "*.h")
- FILE(GLOB SRC_SOURCE "*.cpp")
-
- # 添加库文件
- add_library(${PROJECT_NAME} SHARED ${SRC_HEADER} ${SRC_SOURCE})
-
- # 自动包含目录
- set_property(TARGET ${PROJECT_NAME} PROPERTY
- INTERFACE_INCLUDE_DIRECTORIES
- ${CMAKE_CURRENT_SOURCE_DIR}
- )
-
- target_include_directories(${PROJECT_NAME} PUBLIC ${CMAKE_CURRENT_BINARY_DIR})
-
- set(CPACK_PROJECT_NAME ${PROJECT_NAME})
- set(CPACK_PROJECT_VERSION ${PROJECT_VERSION})
- include(CPack)
韵律感强烈,朗读时如音乐流淌。
正能量充沛,给予读者行动勇气。