首页 > 其他分享 >cmake add_library编译链接静态库cmakelists

cmake add_library编译链接静态库cmakelists

时间:2022-09-04 12:56:54浏览次数:97  
标签:cmakelists cmake 静态 xlog library add cpp

   本篇文章我们来编写CMakeLists.txt使用cmake的add_library的构建静态库,并使用target_link_libraries链接指定的静态库。

cmake的linux windows 和linux环境的准备可以我看前面的文章:

一 代码准备

为了项目更简单点,我这边把静态库和配置和链接静态库的配置放在一个CMakeLists.txt文件中

下面是文件列表(所有文件在同一个目录)

xlog.h

xlog.cpp

test_xlog.cpp

CMakeLists.txt

下面我们分别来看下每个文件中的内容,首先是库的代码xlog.h 和xlog.cpp 。

//xlog.h
#ifndef XLOG_H
#define XLOG_H
#include <string>
class XLog
{
public: void Add(std::string log);
};
#endif
// xlog.cpp 
#include "xlog.h" #include <iostream> using namespace std; void XLog::Add(std::string log) { cout<<log<<endl; }

二 CMake 编译静态库 add_library

下面我们来编写CMakeLists.txt

cmake_minimum_required (VERSION 3.0) 
project (xlog) 
add_library(xlog STATIC xlog.cpp)

 

其中头文件可以加入到 add_library中,比如 add_library(xlog STATIC xlog.cpp xlog.h) 这样保证依赖关系,头文件更改时库也会重新编译。

add_library中的第二个参数 STATIC 表示是静态库,如果不加STATIC的话比如 add_library(xlog xlog.cpp) 就是默认编译动态库,如果要编译静态库再通过cmake的预制变量来控制。

STATIC 替换为SHARED 就是指定编译为动态库,例如:add_library(xlog SHARED xlog.cpp) 。

如果是Linux动态库代码不需要调整,Windows动态库需要在代码中添加 __declspec(dllexport)不然导不出lib文件。

下面在CMakeLists.txt所在目录运行

cmake -S . -B build

cmake --build build

三 CMake 链接静态库

静态库就编译完成,下面引入静态库,添加测试的程序test_xlog.cpp并且再次编辑CMakeLists.txt

//test_xlog.cpp

//test_xlog.cpp 
#include <iostream>
#include "xlog.h" 
using namespace std; 
int main(int argc,char *argv[])
{ out<<"test cmake lib"<<endl; XLog log; log.Add("test xlog"); return 0; }

 

#CMakeLists.txt

#CMakeLists.txt
cmake_minimum_required (VERSION 3.0)
project (xlog) add_library(xlog STATIC xlog.cpp) 
add_executable(test_xlog test_xlog.cpp) 
# 指定加载的库 
target_link_libraries(test_xlog xlog)

 

再次运行

cmake -S . -B build

cmake --build build

就编译出静态库和导入静态库的测试程序。

 

更多的资料可以看cmake官方手册 cmake.org.cn

如果想要学习CMake更多内容,可以看下我的这门课程:

 

标签:cmakelists,cmake,静态,xlog,library,add,cpp
From: https://www.cnblogs.com/xiacaojun/p/16654881.html

相关文章

  • IfcLibraryInformation
    IfcLibraryInformation实体定义IfcLibraryInformation描述了一个库,其中库是结构化的信息存储,通常以允许通过索引或参考值查找信息的方式组织。IfcLibraryInformation提供......
  • cmake和makefile区别和cmake指定编译器(cmake -G)
    一cmake和makefile区别要说明区别,我们先要区分下面三类工具:1.项目构建生成工具首先cmake是项目构建生成工具,cmake的代码可以与平台系统和编译器无关。类似cmake的工具......
  • cmake是什么,为什么现在都用cmake,cmake编译原理和跨平台示例
    一cmake是什么? CMake是一个开源、跨平台的工具系列,是用来构建、测试和打包软件。CMake使用平台无关的配置文件来控制软件编译过程,并生成可在您选择的编译器环境中使用......
  • CMAKE 调用交叉编译器(CMAKE使用)
    CMAKE命令使用时需要与CMakeLists.txt在不同的目录下,一般是在CMakeList.txt文档所在的目录下创建一个build文件夹,然后cd到build文件夹,执行cmake..,此时会根据CMakeLists.......
  • [转]CMake与Make最简单直接的区别
    写程序大体步骤为:1.用编辑器编写源代码,如.c文件。2.用编译器编译代码生成目标文件,如.o。3.用链接器连接目标代码生成可执行文件,如.exe。但如果源文件太多,一个一个编译......
  • ubuntu 16.04 cmake升级
    ubuntu16.04默认安装的cmake版本为3.5,但有时编译一些包时需要更高的版本,需要升级cmake。千万别执行下面的命令,这样会把之前用cmake编译好的包都给卸载掉,包括ros。......
  • 在visual studio中使用cmake生成dll中的坑
    最近改用visualstudio写c++,把我之前基于MinGW的代码库clon下来在vs中跑,结果不能运行,因为链接器总是莫名奇妙地链接的我想要生成的dll文件同名的lib文件如下图所示文件结......
  • 在VS2019中配置OpenGL环境。(使用CMake方法)
    网上一大堆VS下配置OpenGL环境的,但是这些方法都是基于VS空项目,并没有利用Cmake来构建。而我之前的代码都是在Linux下使用cmake构建,所以为了更快的在VS下调试运行我的程序,所......
  • HarmonyOS ETS 如何使用library module
    ​ 参考资料【FAQ】DevEcoStudio如何添加多module 代码实现创建librarymodule右击项目的目录选择“module”在然后选择“Ohoslibrary”一直下一步如下图所示​......
  • CMake及交叉工具编译链的安装使用
    1.原理CMake是一种跨平台编译工具,比make更为高级,使用起来要方便得多。CMake主要是编写CMakeLists.txt文件,然后用cmake命令将CMakeLists.txt文件转化为make所需要的mak......