栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

cmake创建库和使用库工程示例(多个cmakelists)

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

cmake创建库和使用库工程示例(多个cmakelists)

使用cmake构建一个工程,该工程创建了两个静态库,另外生成一个引用该两个静态库的可执行文件。

1.构建工程


该工程生成两个库liaadd.a和liabmul.a。一个工程管理的cmake,一个生成lib的cmake,一个生成可执行测试程序的cmake。

文件:add.h

int add(int a, int b);

文件:add.c

#include "add.h"

int add(int a, int b)
{
	return a + b;
}

文件:mul.h

int mul(int a, int b);

文件:mul.c

#include "mul.h"

int mul(int a, int b)
{
	return a * b;
}

文件:main.c

#include "add.h"
#include "mul.h"
#include 

int main()
{
	printf("3 + 5 = %dn", add(3, 5));
	printf("3 * 5 = %dn", mul(3, 5));
	return 0;
}
2.构建编译规则

首先我们要管理整个工程,告诉他目录在哪里,生成库在哪里,生成可执行文件在哪里…然后要去找到子目录在哪里去子目录再找cmake继续编译子目录的库和可执行文件。并且先生成库,再生成可执行文件(可执行文件依赖与这两个库)

根目录CMakeLists.txt(管理整个工程)
cmake_minimum_required (VERSION 2.8)					# cmake版本最低要求
project (test)
SET(CMAKE_SYSTEM_NAME Linux)
SET(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_SOURCE_DIR}/bin)			# 设置了Debug版本和Release版本可执行文件的输出目录
SET(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/bin)			# 设置可执行文件的输出目录
SET(LIBRARY_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/lib)			# 设置库文件的输出目录

include_directories (${PROJECT_SOURCE_DIR}/inc)				# 附加头文件目录

ADD_SUBDIRECTORY(${PROJECT_SOURCE_DIR}/libsrc)				# 先执行这个目录下的cmake
ADD_SUBDIRECTORY(${PROJECT_SOURCE_DIR}/src)					# 上个目录下生成库后,此时再链接生成可执行文件

ADD_SUBDIRECTORY就是可以找到子目录,执行子目录的cmake

子目录生成静态库的CMakeLists.txt
add_library(add STATIC ${PROJECT_SOURCE_DIR}/libsrc/add.c)
add_library(mul STATIC ${PROJECT_SOURCE_DIR}/libsrc/mul.c)
子目录引用静态库生成可执行文件的CMakeLists.txt
aux_source_directory(${PROJECT_SOURCE_DIR}/src SRC_LIST)		# 设置./src为源文件路径

add_executable (test ${SRC_LIST})						# 寻找源文件进行编译
target_link_libraries(test 
	${PROJECT_SOURCE_DIR}/lib/libadd.a 
	${PROJECT_SOURCE_DIR}/lib/libmul.a)						# 编译时需要链接的库
3.测试

在工程的根目录下创建构建目录并进入

mkdir build && cd build

构建makefile

cmake ..


编译 make

进入指定的可执行文件生成目录 project/bin 执行

cd ../bin
./test

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/308887.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号