CMake構建工程

2021-10-03 03:28:48 字數 3685 閱讀 7458

目標:使用cmake構建多級的目錄的c++專案,包含動態庫的引用。

檔案結構:

.

├── cmakelists.txt # 1

├── build

├── lib # 這裡存放動態庫

│ ├── cmakelists.txt # 2

│ ├── lib-bye

│ │ ├── cmakelists.txt # 3

│ │ └── bye.cc # 4

│ └── lib-hello

│ ├── cmakelists.txt # 5

│ └── hello.cc # 6

└── src

├── cmakelists.txt # 7

├── myclass.cc # 8

├── myclass.h # 9

├── myfile

│ ├── submyclass.cc # 10

│ └── submyclass.h # 11

├── bye.h # 12 僅僅提供符號鏈結

├── hello.h # 13

└── main.cc # 14

先給出編譯的效果:

# 先編譯動態鏈結庫

add_subdirectory(src)

# 最後編譯工程,工程依賴動態鏈結

2

add_subdirectory(lib-hello)

# 單獨編譯hello的動態鏈結庫

add_subdirectory(lib-bye)

# 單獨編譯bye的動態鏈結庫

3

set(library_output_path $/bin/lib)

# 設定.so的輸出路徑

file(glob_recurse src_list *.h *.cc *cc *hpp)

# 遞迴地尋找目錄下所有的匹配目錄

add_library(bye shared $

)# 建立bye動態鏈結庫,不加shared是靜態庫

message(status "finish build lib-bye"

)# 成功編譯地訊息

4

#include

// 這裡僅僅用了乙個簡單地函式,作為說明示例。

void

bye(

)

5

# 同lib-bye

set(library_output_path $/bin/lib)

file(glob_recurse src_list *.h *.cc)

add_library(hello shared $

)message(status "finish build lib-hello"

)

6

#include 

void hello(

)

7

file(glob_recurse src_list  *.h *.cc *.hpp *.cpp)

# 遞迴的找當前cmakelists.txt下所有匹配的檔案

message(status "finish get all file"

)set(executable_output_path $/bin)

# 設定二進位制目錄儲存檔案

message(status "finish set executable file: "$)

add_executable(main $

)# 編譯工程目錄

message(

"finish build project"

)link_directories(

$/bin/lib)

# 鏈結資料

target_link_libraries(main hello bye)

# 注意這裡,鏈結的名稱要和lib中宣告的名稱一致,不要有其它的

message(status "finish link lib"

)

8

#include

"myclass.h"

#include

void myclass::

foo(

)

9

#ifndef my_class_h

#define my_class_h

class

myclass

;#endif

10

#include

"submyclass.h"

#include

void submyclass::

foo(

)

11

#ifndef sub_my_class_h

#define sub_my_class_h

class

submyclass

;#endif

12

#ifndef bye_h

#define bye_h

void

bye();

// 宣告,僅僅提供符號鏈結

#endif

13

#ifndef hello_h

#define hello_h

void

hello()

;// 宣告,僅僅提供符號鏈結

#endif

14

#include

#include

"myclass.h"

#include

"./myfile/submyclass.h"

#include

"hello.h"

#include

"bye.h"

intmain()

如何使用CMake構建工程

本文舉乙個簡單的使用cmake構建c 工程的例子。通過這個例子來看下如何使用cmake構建乙個c 工程。cmakelists.txt 總cmake aaa dir 動態庫目錄 cmakelists.txt 動態庫aaa的cmake include dir 庫aaa對外的頭檔案目錄 aaa.h 庫aa...

cmake構建qt工程

如何選擇?using cmake to build qt projects 一文中說 儘管如此,如果簡單qt的工程都不知道怎麼用 cmake 構建,複雜的工程,就更不知道如何使用 cmake 了。還是從簡單的學起吧 include include qdebug int main int argc,c...

cmake構建vs工程檔案

參考部落格 1 首先建立乙個資料夾名稱為demo 2 在資料夾demo的裡面新建main.cpp檔案和cmakelists.txt檔案 3 main.cpp中 如下 include using namespace std int main void cmakelists.txt檔案中加入 如下 cm...