linux cmake 编译项目,使用CMake构建复杂工程
0. 什么是CMake
CMake是一個跨平臺的編譯、安裝、測試以及打包工具;CMake不直接編譯軟件,而是結合原生構建系統來構建軟件。CMake配置文件是CMakeList.txt文件(每個源碼文件夾下都要有一個),CMake根據配置文件在生成Unix的Makefile或VS的solution文件等。
1. 為什么選CMake
別人為什么選CMake我不清楚,我是因為在Linux上直接寫Makefile太痛苦,而項目又會跨平臺,Windows和Linux都要有
2. 用一個簡單工程來說明CMake用法。
工程名soTest,里面包含一個兩個so(dll)文件:so1和so2,以及一個測試工程st
工程內文件結構如下:
文件so1/so1.c:用于生成libso1.so
文件so2/so2.c:用于生成libso2.so,依賴于libso1.so,會調用libso1.so內函數
文件test/test.c:生成可執行文件,調用libso2.so,調用libso2.so內函數
文件test/test.py:使用python調用libso2.so函數
build目錄用于存放編譯時和種文件,這樣可以保持源代碼文件夾干凈
文件結構
可以看,每個目錄下都有一個CMakeList.txt的文件,這些文件就是CMake的配置文件,CMake就是根據這些文件來生成其他構建文件的
3. 項目代碼如下:
1 //so1/so1.c
2 int add_fun(int a, intb)3 {4 return a+b;5 }
1 //so1.h
2 #ifndef _so1_h_3 #define _so1_h_
4
5 int add_fun(int a, intb);6 int fun_test(inta);7
8 #endif//_so1_h_
1 //so2/so2.h
2 #include
3 #include
4 #include "so1.h"
5
6 int fun_test(inta)7 {8 for (int i=0; i
13 return 0;14 }
1 //test/test.c
2 #include
3 #include
4
5 #include "so1.h"
6
7 int main(int argc, char **argv)8 {9 return fun_test(9);10 }
1 # ./CMakeLists.txt,工程總配置文件2
3 # 最低版本要求,必須4 cmake_minimum_required(VERSION 3.0)5
6 # 工程名稱,這里用soTest這個名字7 project(soTest)8
9 # 添加include目錄,本例頭文件在./目錄下,所以直接取${PROJECT_SOURCE_DIR}/
10 include_directories(${PROJECT_SOURCE_DIR}/)11
12 # 添加鏈接庫查找目錄,庫查找序按照參數順序從向右查13 link_directories(${PROJECT_BINARY_DIR}/libs /usr.local/libs /usr/lib)14
15 # 設置生成的庫文件目錄,這里我們設置成和庫目錄相同16 set(LIBRARY_OUTPUT_PATH ${PROJECT_BINARY_DIR}/libs)17
18 # 設置可執行文件目錄,同樣設成和庫目錄相同19 set(EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR}/libs)20
21 # 添加子目錄(每個子目錄下都必須有自已的CMakeLists.txt文件22 add_subdirectory(so1)23 add_subdirectory(so2)24 add_subdirectory(test)
# ./so1/CMakeLists.txt
# project name: soTest
project(soTest)
# set source files
set(so1 so1.c)
# setmaketo a shared library
add_library(so1 SHARED ${so1})
1 # ./so2/CMakeLists.txt2
3 project(soTest)4 set(so2 so2.c)5 add_library(so2 SHARED ${so2})6
7 # link so18 target_link_libraries(so2 so1)
1 project(soTest)2 set(st test.c)3
4 # 生成可執行文件5 add_executable(st test.c)6 target_link_libraries(st so2 so1)
4. CMake支持在源文件目錄外進行構建,這里我們選擇在./build目錄下進行構建,好處是不會把源文件目錄污染,在build目錄下運行命令(命令后參數是總CMakeLists.txt文件所在目錄):
cmake .. && make && ./libs/st
命令運行后結果如下
總結
以上是生活随笔為你收集整理的linux cmake 编译项目,使用CMake构建复杂工程的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: pythonweb框架_浅谈python
- 下一篇: MYSQL数据库实验三多表查询_数据库之