目標:使用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...