CMake学习(3)
这里测试添加一个库
常见的场景是软件合作开发,然后拿到一个其他同事编写的库,需要加入到自己的项目中。
先说库文件,这里做个demo。
假定这个库就是一个简单的MathFunc.c文件和MathFunc.h文件,放在一个MathFunc文件夹下面,这个文件夹位于项目的源代码下,和CMakeLists.txt并列。MathFunc.c里面有一个gcd函数,计算两个无符号整数的最大公约数,头文件和源文件如下:
#ifndef __MATH_FUNC_H_ #define __MATH_FUNC_H_ //求最大公约数 unsigned int gcd(unsigned int a,unsigned b); #endif
源文件:
#include "MathFunc.h"
//辗转相除法求余数
unsigned int gcd(unsigned int a,unsigned b)
{
unsigned int t,r;
//swap value, make a larger than b
if(a<b)
{
t=a;
a=b;
b=t;
}
while(b>0)
{
r=a%b;
a=b;
b=r;
}
return a;
}
为了使用这个库,你当然需要编译这个源文件了,如何实现呢?
需要两步。
首先,需要在这个MathFunc文件夹下面写一个子CMakeLists.txt,内容很简单:
add_library(MathFunc MathFunc.c)
说明需要做一个Library。当然因为这个库文件很简单,所以就只有这么几行,如果是一个大的库,那就需要把它当做一个新的Cmake项目来理解就行了。
然后在主CMakeLists.h中最后面加入几行:
add_subdirectory (MathFunc)
include_directories("${PROJECT_SOURCE_DIR}/MathFunc")
target_link_libraries (step1 MathFunc)
通过使用add_subdirectory ,将使这个库中的CMakeLists.txt被Cmake调用,从而能够生成库,include_directories将包含检索的路径,target_link_libraries 告知要将这个库链接进去。
总结一下就是,CMake支持类似递归调用一样,在主CMakeLists文件下面,可以再把别的项目或者库的CMakeLists加进来。

浙公网安备 33010602011771号