cmake创建库和使用库工程示例(多个cmakelists)
Posted Hero_HL
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了cmake创建库和使用库工程示例(多个cmakelists)相关的知识,希望对你有一定的参考价值。
使用cmake构建一个工程,该工程创建了两个静态库,另外生成一个引用该两个静态库的可执行文件。
gitee链接:https://gitee.com/herohl/mycode.git
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 <stdio.h>
int main()
printf("3 + 5 = %d\\n", add(3, 5));
printf("3 * 5 = %d\\n", 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
以上是关于cmake创建库和使用库工程示例(多个cmakelists)的主要内容,如果未能解决你的问题,请参考以下文章
Android OpenCVVisual Studio 创建支持 OpenCV 库的 CMake 工程 ④ ( OpenCV 官方代码示例 )