linux cmakelist工程编译,使用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目录用于存放编译时和种文件,这样可以保持源代码文件夹干净

文件结构

f8d81a3d399c97034f61decb4099f0be.png

可以看,每个目录下都有一个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

命令运行后结果如下

7f7e41acf1051569ddbc985f72c615a2.png

CMake 的详细介绍:请点这里

CMake 的下载地址:请点这里

0b1331709591d260c1c78e86d0c51c18.png

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值