cmake创建库和使用库工程示例(多个cmakelists)
Posted Hero_HL
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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 <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 官方代码示例 )