CMake编译中的库文件和头文件链接你了解吗

目录
  • 外部库文件、头文件链接
    • 指令
      • 头文件搜索路径
      • 链接库文件
    • 实例
      • 新建工程空间
      • 定义src内容
      • 编译
  • 总结

外部库文件、头文件链接

指令

头文件搜索路径

INCLUDE_DIRECTORIES([AFTER|BEFORE] [SYSTEM] dir1 dir2 ...)
  • [AFTER|BEFORE] :添加方式,默认

    • AFTER AFTER:在后方进行追加内容(新加入内容在后)
    • BEFORE:在前方进行追加内容(新加入内容在前)
  • dir:头文件路径地址,含有空格的路径应用双引号括起

链接库文件

LINK_DIRECTORIES(directory1 directory2 ...)

directory:库文件名称

该指令用于添加非标准共享库搜索路径。

TARGET_LINK_LIBRARIES(target library1 <debug | optimized>
							 library2 ...
					 )

target:被链接的对象library:库名称

实例

此处采用之前生成安装好的库文件libhello.so进行演示。

新建工程空间

首先,新建工程文件并定义工程CMakeLists.txt文件。

# 新建工程空间t4
mkdir -p ~/cmake_test/t4
cd ~/cmake_test/t4
# 新建子目录src
mkdir src
# 新建工程CMakeLists.txt
vim CMakeLists.txt

子目录src用于存放源代码,工程根目录下的CMakeLists.txt内容如下:

# 工程名
PROJECT(NEWHELLO)
# 添加源码目录
ADD_SUBDIRECTORY(src)

定义src内容

进入子目录src,新建源文件main.cpp

# 进入src子目录
cd ~/cmake_test/t4/src
# 新建源文件
vim main.cpp

main.cpp文件内容如下:

// main.cpp
#include <iostream>
using namespace std;

int main()
{
    HelloFunc();
    return 0;
}

源文件中调用了之前封装的HelloFunc函数,应将其头文件及链接进行定义。在src目录中新建CMakeLists.txt,其内容如下:

# 添加头文件搜索路径
INCLUDE_DIRECTORIES(/usr/include/hello)
# 添加链接
TARGET_LINK_LIBRARIES(main libhello.so)
# 生成目标二进制文件
ADD_EXECUTABLE(main main.cpp)

上述语句,将动态库libhello.somain进行链接,并将头文件加入搜索路径中。此外,也可以选择链接静态库libhello.a,只需将其修改为如下即可:

# 添加链接
TARGET_LINK_LIBRARIES(main libhello.a)

编译

在t4根目录中新建build子目录用于编译:

# 新建build子目录
cd ~/cmake_test/t4
mkdir build & cd build
# 构建
cmake ..
# 编译
make -j12

此时,将在build/src中生成可执行二进制文件main,运行该程序效果如下:

# 运行程序
cd ~/cmake_test/t4/build/src
bash main

# 程序输出:
Hello World

总结

本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注我们的更多内容!

(0)

相关推荐

  • vscode和cmake编译多个C++文件的实现方法

    目的是利用vscode及相关插件编译多个C++文件. 我已经装好cmake和mingw并且将它们的路径添加到系统变量path中了. vscode装上如下几个插件: 点击vscode左上角 文件->首选项->设置,弹出如下窗口: cmake tools里头有一项cmake.preferredGenerators要根据编译器修改成对应的值,mingw对应的是MinGW Makefiles 下面一项cmake要配置cmake的安装路径,我的是C:\\Program Files\\CMake\\bin

  • 实例分享cmake编译一个简单c++项目(demo)

    下面通过一个小例子来说明cmake编译一个c++项目,生成可执行文件: 整理目录结构: CMake Lists.txt addlib build main.cpp 电脑上没有tree命令,也不大敢截图,将就着看看,其中build是cmake编译指定的路径,addlib下面也有一个头文件和源文件  ,还有一个CmakeLists.txt,可以看下: CMake Lists.txt library.cpp library.h 先看各个文件的代码: addlib/library.h: #ifndef

  • centos 7 vscode cmake 编译c++工程的教程详解

    一.环境说明 1)gcc/g++  cmake安装建议 gcc/g++内核自带的即可,如果需要新的自行安装, cmake也一样,如有需要新的版本自行安装. 2)vscode安装插件 必要的插件c/c++ 0.28.1 cmake 0.0.17 cmake tools 1.4  (这几个插件的版本可能会不同,以扩展搜索到的最新的为准) 二.创建项目实验 1)打开项目文件夹 第一步:打开vscode,点击左上角文件,在下拉菜单选择打开文件夹!注意,是打开文件夹,不是工作区,也不是其它的!! 第二步:

  • Android Studio中通过CMake使用NDK并编译自定义库和添加预编译库

    Note:这篇文章是基于Android Studio 3.01版本的,NDK是R16. step1:创建一个包含C++的项目 其他默认就可以了. C++ Standard 指定编译库的环境,其中Toolchain Default使用的是默认的CMake环境:C++ 11也就是C++环境.两种环境都可以编库,至于区别,后续会跟进,当前博文使用的是CMake环境. Exceptions Support 如果选中复选框,则表示当前项目支持C++异常处理,如果支持,在项目Module级别的build.g

  • linux下使用cmake编译安装mysql的详细教程

    一.安装cmake 1.解压cmake压缩包 [root@mysql tools]# tar -zvxf cmake-2.8.8.tar.gz [root@mysql tools]# ls cmake-2.8.8 cmake-2.8.8.tar.gz mysql-5.5.16.tar.gz scripts 2.解析 [root@mysql tools]# cd cmake-2.8.8 [root@mysql cmake-2.8.8]# ./configure ------------------

  • CMake编译中的库文件和头文件链接你了解吗

    目录 外部库文件.头文件链接 指令 头文件搜索路径 链接库文件 实例 新建工程空间 定义src内容 编译 总结 外部库文件.头文件链接 指令 头文件搜索路径 INCLUDE_DIRECTORIES([AFTER|BEFORE] [SYSTEM] dir1 dir2 ...) [AFTER|BEFORE] :添加方式,默认 AFTER AFTER:在后方进行追加内容(新加入内容在后) BEFORE:在前方进行追加内容(新加入内容在前) dir:头文件路径地址,含有空格的路径应用双引号括起 链接库文

  • Clion(CMake工具)中引入第三方库的详细方法

    前言 因为自己最近在学Redis,想要在C++中获取到Redis内存数据库中的数据,需要使用Redis客户端来连接Redis传输命令并接收数据,在Redis官方网站上推荐的客户端中选择了acl-redis.而Clion是一款非常优秀的C++集成开发环境,Clion选择了CMake作为构建工具,所以需要在CMake配置文件中进行配置. 如何配置 CMake的所有配置都写在一个叫CMakeLists.txt的文件当中,所有的配置都写在该文件当中. 这是我的工程目录结构,Include文件夹为acl-

  • C++中头文件的概念与基本编写方法

    1 标准库中的头文件 C++标准库中的一切内容都被放在名字空间std中(名字空间中的内容对外是不可见的),但是带来了一个新问题,无数现有的C++代码都依赖于使用了多年的伪标准库中的功能,如声明在<iostream.h>等头文件中的功能,使用std包装标准库导致现有代码的不可用,为了兼容这种情况,标准委员会为包装了std的那部分标准库创建了新的头文件,新的头文件的文件名与旧的一样,只是没有.h这个后缀,如<iostream.h>就变成了<iostream>.对于C头文件,

  • VS2019中在源文件中如何使用自己写的头文件

    目录 前言 开始教程 建立一个头文件 建立头文件对应的.cpp文件 在其余源文件中使用 前言 一个完整的头文件应该分为:.h文件与.cpp文件 一般来说函数的声明,类(结构体)的定义都是放在.h头文件中,而函数的实现则是写在对应的.cpp文件中,什么个对应法呢,就是头文件文件名与.cpp文件名相同. 上述.cpp文件是c++的源文件,也可以是.cc语言的源文件. 在引用自己写的头文件时是 include " 自己的头文件名",而不是include< >该方法只能引用系统定义

  • 详解C 语言项目中.h文件和.c文件的关系

    详解C 语言项目中.h文件和.c文件的关系 在编译器只认识.c(.cpp))文件,而不知道.h是何物的年代,那时的人们写了很多的.c(.cpp)文件,渐渐地,人们发现在很多.c(.cpp)文件中的声明语句就是相同的,但他们却不得不一个字一个字地重复地将这些内容敲入每个.c(.cpp)文件.但更为恐怖的是,当其中一个声明有变更时,就需要检查所有的.c(.cpp)文件. 于是人们将重复的部分提取出来,放在一个新文件里,然后在需要的.c(.cpp)文件中敲入#include XXXX这样的语句.这样即

  • c++ 防止头文件重复引入的三种方法

    在之前我们详细介绍了 C 语言中如何使用宏定义(#ifndef / #define / #endif)来有效避免头文件被重复 #include,此方式在 C++ 多文件编程中也很常用. 举个例子,如下是一个 C++ 项目,其内部含有 school.h 和 student.h 这 2 个头文件以及 main.cpp 源文件,其各自包含的代码为: //student.h class Student {     //...... }; //school.h #include "student.h&qu

  • C++ 学习之旅二 说一说C++头文件

    一.C++头文件究竟是什么,你怎么看? 每个C++/C程序通常分为两个文件.一个文件用于保存程序的声明(declaration),称为头文件.另一个文件用于保存程序的实现(implementation),称为定义(definition)文件.C++/C程序的头文件以".h"为后缀,C程序的定义文件以".c"为后缀,C++程序的定义文件通常以".cpp"为后缀(像linux等系统以".cc"或".cxx"为后

  • C语言编程入门之程序头文件的简要解析

    头文件是扩展名为.h的文件,其中包含C函数的声明和宏定义,也可以多个源文件之间共享.有两种类型的头文件:程序员编写的文件,和编译器中附带的文件. 要求使用头文件的程序,包括通过它,使用C语言预处理指令#include就像所看到的包含stdio.h头文件,它随着编译器自带. 包括一个头文件等于复制头文件的内容,但我们不这样做,因为这很容易出错,一个好主意是我们不复制头文件的内容,特别是包括多个程序的源文件. 在C或C++程序的简单做法是,我们把所有的常量,宏全系统全局变量和函数原型在头文件,其中包

  • C++万能库头文件在vs中的安装步骤(图文)

    前言 C++万能库头文件在vs2019中的安装 一.C++万能库是什么? 1.C++万能库的定义:简而言之,就是一条语句代替了多条语句,包含了目前c++所包含的所有头文件 2.C++万能库的写法:#include <bits/stdc++.h> 二.C++万能库包含的内容: 如下是bits/stdc++.h所包含的C++所有库函数头文件: #ifndef _GLIBCXX_NO_ASSERT #include <cassert> #endif #include <cctype

  • 解析VC中预编译头文件的深入分析

    一.为什么预编译头文件:预编译头的概念: 所谓的预编译头就是把一个工程中的那一部分代码,预先编译好放在一个文件里(通常是以.pch为扩展名的),这个文件就称为预编译头文件这些预先编译好的代码可以是任何的C/C++代码,甚至是inline的函数,但是必须是稳定的,在工程开发的过程中不会被经常改变.如果这些代码被修改,则需要重新编译生成预编译头文件.注意生成预编译头文件是很耗时间的.同时你得注意预编译头文件通常很大,通常有6-7M大.注意及时清理那些没有用的预编译头文件.也许你会问:现在的编译器都有

随机推荐