首页 > 编程语言 >cmake系列-怎么处理C++仅标头库

cmake系列-怎么处理C++仅标头库

时间:2024-11-16 13:17:04浏览次数:3  
标签:demoB demoA cmake C++ add 标头库 include

这篇文章讲一下cmake怎么处理C++仅标头库,什么叫仅标头库呢,顾名思义,就是只有头文件的程序库。

来看这么一个demo
在这里插入图片描述

这个demo里面有demoA和demoB两个项目,其中demoA是一个仅标头库,demoB使用demoA提供的库。

我们知道仅标头库是不能编译成程序目标的,当然用cmake处理也不可能违背这种规则,但是我们一样可以为项目demoA指定一个目标,只是相对于真正的可以编译成文件的程序目标而言,仅标头库的程序目标只是一种概念。

我们来看一下demoA的具体内容

// demoA.hpp

#include <iostream>

void Func()
{
    std::cout << "demo" << std::endl;
}
project(demoA)

add_library(${PROJECT_NAME} INTERFACE)

target_include_directories(${PROJECT_NAME} INTERFACE include)

对于仅标头库而言,指令add_library()和target_include_directories()的写法会不一样,需要像上面这个CMakeLists.txt中这么写才可以,另外如果仅标头库需要使用其他的库,在用指令target_link_libraries()设置依赖的库时,设置访问属性也需要用INTERFACE参数。

然后看项目demoB

// main.cpp

#include "demoA.hpp"

int main()
{
    Func();

    return 0;
}
project(demoB)

add_executable(${PROJECT_NAME} main.cpp)

target_link_libraries(${PROJECT_NAME} PRIVATE demoA)

可以看到在demoB使用demoA提供的库时,就正常用就可以。

然后是顶层CMakeLists.txt

cmake_minimum_required(VERSION 3.25)

project(demo)

add_subdirectory(demoA)
add_subdirectory(demoB)

这些内容写好之后我们就可以在demo目录下执行命令cmake -B build生成构建系统了,然后执行命令cmake --build build构建程序目标就可以了。
在这里插入图片描述

可以看到demoA并不会真正构建出程序目标,但是demoB可以正常使用demoA提供的库并且真正构建出程序目标。

标签:demoB,demoA,cmake,C++,add,标头库,include
From: https://blog.csdn.net/2401_85919417/article/details/143658784

相关文章

  • c++的基础认识
    大家好!我是machenss,一个新兴CSDN作者,希望大家多多支持!从今天开始,我将给大家介绍一些简单的c++知识!首先,c++是一种编程语言,是c语言的升级版。学过其他编程语言的话(c.python.java等等),学习c++是很简单的。学习各种编程语言的第一步,当然是打印出“Helloworld!"啦!给大家看一下c++......
  • 自制C++游戏头文件:C++自己的游戏头文件!!!(后续会更新)
    引言在这个数字时代,计算机游戏已经成为人们生活中不可或缺的一部分。它们不仅为我们带来了无尽的乐趣,还激发了我们的创造力和解决问题的能力。今天,我们将深入探讨一个特别的头文件——CPPgame.h,它包含了多个结构体和函数,用于实现多种精彩的游戏体验。无论你是游戏开发者还是游......
  • C++:基于红黑树封装map和set
    红黑树的修改想要用红黑树封装map和set,需要对之前实现的key-value红黑树进行修改,因为map是key-value结构而set是key结构,之前实现的红黑树不能满足需求。我们需要将key和key-value抽象统一成成一个类型T,需要修改红黑树节点类和红黑树类进行。红黑树节点enumColor{ RED, ......
  • 第23课-C++-红黑树的插入与旋转
    ......
  • (分享源码)计算机毕业设计必看必学 上万套实战教程手把手教学JAVA、PHP,node.js,C++、pyth
    摘要随着计算机科学技术日渐成熟,人们已经深刻认识到了计算机功能的强大,计算机已经进入到了人类社会发展的各个领域,并且发挥着十分重要的作用。通过管理系统在电脑上的应用,人们能更好的管理信息,储存数据。为了能够提供游戏商城的方便性,开发了基于vue的游戏网站。此游戏网站......
  • (分享源码)计算机毕业设计必看必学 上万套实战教程手把手教学JAVA、PHP,node.js,C++、pyth
    摘要随着科学技术的飞速发展,社会的方方面面、各行各业都在努力与现代的先进技术接轨,通过科技手段来提高自身的优势,招聘网站当然也不能排除在外。招聘网站是以实际运用为开发背景,运用软件工程开发方法,采用互联网技术构建的一个管理系统。整个开发过程首先对软件系统进行需......
  • 计算机毕业设计项目推荐,SSM山西能源学院教室管理系统81671(开题答辩+程序定制+全套文案
    摘 要随着科学技术的飞速发展,社会的方方面面、各行各业都在努力与现代的先进技术接轨,通过科技手段来提高自身的优势,山西能源学院教室管理系统当然也不能排除在外。山西能源学院教室管理系统是以实际运用为开发背景,运用软件工程原理和开发方法,采用 SSM技术构建的一个管理系......
  • C++ 游戏开发入门教程:从基础到实践
    引言C++是一种广泛应用于游戏开发的编程语言,因其高性能和对硬件资源的精细控制能力,成为了许多大型游戏和引擎的首选语言。无论是开发2D还是3D游戏,C++都能够提供高效的计算和优异的性能,尤其在需要处理大量数据和实时计算的情况下,如渲染、物理计算和网络通信等。本文将介......
  • C++语法学习整理
    目录1、move与forwardmoveforward2、左值和右值左值右值引用和值类别之间的关系3、1、move与forwardmove语法形式:std::move<T>(t),T是要转换的对象的类型(通常可以通过模板参数推导自动确定),t是要被转换(移动)的左值对象;应用场景:资源所有权转移1)容器元素移动:当需要高效地将一......
  • qmake和cmake是啥呀
    QMake和CMake都是用于构建和管理软件项目的工具,特别是在C++项目中广泛使用。它们的主要目的是自动化构建过程,管理项目的编译、链接等操作。但它们之间有一些关键的差异,主要体现在使用的方式、支持的功能以及跨平台能力等方面。1.QMakeQMake是Qt框架的构建工具,通常用于开......