cmake--多級目錄工程


前言

很多大工程由不同動態庫和程序構成,並表現為多級目錄和子工程的樣式。

一, 目錄結構

├── CMakeLists.txt  -------------------->[1]
├── subbinary
│           ├── CMakeLists.txt----------->[2]
│           └── main.cpp
├── sublibrary1
│           ├── CMakeLists.txt------------>[3]
│           ├── include
│           │          └── sublib1
│           │                       └── sublib1.h
│           └── src
│                    └── sublib1.cpp
└── sublibrary2
              ├── CMakeLists.txt------------>[4]
              └── include
                      └── sublib2
                              └── sublib2.h

* link:CMakeLists.txt[] - Top level CMakeLists.txt
* link:subbinary/CMakeLists.txt[] - to make the executable
* link:subbinary/main.cpp[] - source for the executable
* link:sublibrary1/CMakeLists.txt[] - to make a static library
* link:sublibrary1/include/sublib1/sublib1.h[]
* link:sublibrary1/src/sublib2.cpp[]
* link:sublibrary2/CMakeLists.txt[] - to setup header only library
* link:sublibrary2/include/sublib2/sublib2.h[]

二,cmake腳本

├── CMakeLists.txt  -------------------->[1]

cmake_minimum_required (VERSION 3.5)

project(subprojects)

# 添加子目錄
add_subdirectory(sublibrary1)
add_subdirectory(sublibrary2)
add_subdirectory(subbinary)

├── CMakeLists.txt----------->[2]

project(subbinary)

# 創建可執行程序
add_executable(${PROJECT_NAME} main.cpp)

#  使用別名 sub::lib1 鏈接subproject1下的靜態庫 
# 使用別名 sub::lib2 鏈接subproject2下的庫文件
target_link_libraries(${PROJECT_NAME}
sub::lib1
sub::lib2
)

├── CMakeLists.txt------------>[3]

project (sublibrary1)

# 添加工程源文件到庫,設置庫別名

add_library(${PROJECT_NAME} src/sublib1.cpp)
add_library(sub::lib1 ALIAS ${PROJECT_NAME})

# 包含相關的頭文件

target_include_directories( ${PROJECT_NAME}
PUBLIC ${PROJECT_SOURCE_DIR}/include
)

├── CMakeLists.txt------------>[4]

project (sublibrary2)

add_library(${PROJECT_NAME} INTERFACE)
add_library(sub::lib2 ALIAS ${PROJECT_NAME})

target_include_directories(${PROJECT_NAME}
INTERFACE
${PROJECT_SOURCE_DIR}/include
)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM