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加进来。

posted @ 2019-12-16 20:20  castor_xu  阅读(187)  评论(0编辑  收藏  举报