首页
学习
活动
专区
圈层
工具
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

面向 C++ 的现代 CMake 教程(一)

本书将指导您如何形成源目录,以及如何构建目标和包。随着您的进展,您将学习如何编译和链接可执行文件和库,这些过程是如何详细工作的,以及如何优化所有步骤以获得最佳结果。...本书涵盖内容 第一章,CMake 的初步步骤,涵盖了如何安装和使用 CMake 的命令行,以及构成项目的文件。...第四章,与目标工作,介绍了逻辑构建目标,这些目标为可执行文件和库生成工件。 第五章,使用 CMake 编译 C++源代码,解释了编译过程的细节以及如何在 CMake 项目中控制编译过程。...我们将在第十一章中学习如何编写这些文件,安装和打包。同时,这里有一些有趣的细节要注意: 配置文件(原名)包含有关如何使用库二进制文件、头文件和辅助工具的信息。...作为提醒:构建树是目标/输出目录的路径,源树是您的源代码所在的路径。

1.6K01

CMake学习笔记

外部构建,就会把生成的临时文件放在build目录下,不会对源文件有任何影响强烈使用外部构建方式 外部构建方式举例 //例子目录,CMakeLists.txt和上面例子一致 [root@localhost...二进制 将构建后的目标文件放入构建目录的 bin 子目录 将 doc 目录 的内容以及 COPYRIGHT/README 安装到/usr/share/doc/cmake/ 将目标文件放入构建目录的 bin.../configure –prefix=/usr 如何安装HelloWord 使用CMAKE一个新的指令:INSTALL INSTALL的安装可以包括:二进制、动态库、静态库以及文件、目录、脚本等 使用CMAKE...:非目标文件的可执行程序安装(比如脚本之类) INSTALL(PROGRAMS runhello.sh DESTINATION bin) 说明:实际安装到的是 /usr/bin 安装 doc 中的 hello.txt...安装过程 cmake .. make make install 静态库和动态库的构建 任务: 1,建立一个静态库和动态库,提供 HelloFunc 函数供其他程序编程使用,HelloFunc 向终端输出

2.2K20
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    【详解】CentOS7源码安装cmake

    CentOS7源码安装CMake在开发和部署软件项目时,CMake 是一个非常流行的构建工具。它可以帮助我们管理项目的构建过程,支持多种编译器和操作系统。...本文将详细介绍如何在 CentOS 7 系统上从源码安装 CMake。准备工作在开始安装之前,请确保你的系统已经安装了必要的开发工具和库文件。...验证安装安装完成后,可以通过以下命令验证 CMake 是否安装成功:cmake --version如果安装成功,你应该会看到类似如下的输出:cmake version 3.22.1使用 CMake现在你已经成功安装了...CMake,可以开始使用它来构建你的项目了。...环境变量:如果 CMake 安装在非标准路径(如 ​​/usr/local/bin​​),确保该路径已添加到你的 ​​PATH​​ 环境变量中。

    31010

    CMake 秘籍(五)

    我们的示例使用了 BUILD_ALWAYS 选项以确保外部项目总是被新鲜构建。 安装选项:这些是配置外部项目应如何安装的选项。...输出日志选项LOG_BUILD和LOG_INSTALL指示ExternalProject_Add为构建和安装操作编写日志文件,而不是输出到屏幕。...如前一示例所示,各个子项目并非必须由 CMake 管理。与前一示例相反,本示例中的外部子项目将是一个 CMake 项目,并将展示如何使用超级构建下载、构建和安装 FFTW 库。...这样的文件将库作为目标导出,供第三方项目使用。目标包含版本、配置和库的位置,即有关目标如何配置和构建的完整信息。...显然,CMake 能够执行以下操作: 确定使用哪个编译器从列出的源文件获取目标文件。 选择适当的链接器来从这些目标文件构建库(或可执行文件)。 CMake 如何确定使用哪个编译器?

    1.4K20

    CMake 秘籍(六)

    在本章中,我们将涵盖以下节: 安装你的项目 生成导出头文件 导出你的目标 安装超级构建 引言 在前几章中,我们已经展示了如何使用 CMake 配置、构建和测试我们的项目。...我们需要安装一个可执行文件、一个库和一个头文件。可执行文件和库是构建目标,因此我们使用install命令的TARGETS选项。...CMake 目标是对构建系统将要执行的操作非常有用的抽象。使用PRIVATE、PUBLIC和INTERFACE关键字,我们可以设置同一项目内的目标将如何相互作用。...) 在这里,我们指导 CMake 将编译后的 Python 模块文件安装到相对于安装目标位置的account子目录中(第十章,编写安装程序,详细讨论了如何设置目标位置)。...CMake INTERFACE库是构建系统中的目标,但不直接创建任何构建输出。然而,由于它们是目标,我们可以在它们上面设置属性。就像“真实”目标一样,它们也可以被安装、导出和导入。

    66300

    CMake学习笔记(二)——CMake语法

    ) 指令不会对该变量有影响,但改变了最终目标文件的存储路径; CMAKE_CURRENT_LIST_FILE:输出调用该变量的CMakeLists.txt的完整路径; CMAKE_CURRENT_LIST_LINE...:输出该变量所在的行; CMAKE_MODULE_PATH:定义自己的cmake模块所在路径; EXECUTABLE_OUTPUT_PATH:重新定义目标二进制可执行文件的存放位置; LIBRARY_OUTPUT_PATH...内部构建方法中,cmake生成的中间文件和可执行文件都会存放在项目目录中;外部构建方法中,中间文件与可执行文件都存放在build目录中。 笔者强烈建议使用外部构建方法。...注:如果希望使用CMAKE_INSTALL_PREFIX定义安装路径,就需要使用相对路径,这时候安装后的路径就是${CMAKE_INSTALL_PREFIX}/ 其余参数待笔者使用到再进行补充吧...[COMPONENT ] [RENAME ] [OPTIONAL]) 使用方法基本和上述目标文件指令的INSTALL相同,唯一别的不同是,安装非目标文件之后的权限为

    6K100

    超级加速!ccache让 C++ 编译速度飞起来

    使用ccache跑一个工程的时候,如果不注意标准输出内容,就比较难判断本次编译是否使用了ccache。...output && cmake --build output为了在日常编译中可以轻松使用ccache,可以将ccache伪装成编译器,比如:# 找到ccache的安装路径 which ccache...muduo的依赖项安装:#安装cmake sudo apt-get install cmake #安装boost sudo apt-get install libboost-dev libboost-test-dev...ccache只能缓存完整的编译结果,对于中间生成的对象文件等无法实现缓存。ccache主要是为支持标准构建系统而设计的,对于非标准构建系统的支持有限。...新的技术会涉及构建缓存,即缓存构建过程中产生的中间输出,使得编译可以更快地进行。而ccache目前主要关注源码层面的缓存。

    41410

    CMake 秘籍(八)

    }) 作为健全性检查,我们可以尝试配置和构建项目,但到目前为止还没有目标,因此构建步骤的输出将为空: $ mkdir -p build $ cd build $ cmake .. $ cmake --build...我们很快将开始添加目标,以使构建更加充实。 如何同时允许传统配置和 CMake 配置 CMake 的一个非常好的特性是,我们可以在源代码目录之外构建,构建目录可以是任何目录,而不必是项目目录的子目录。...记录传统构建过程的记录 在我们向配置中添加任何目标之前,通常首先记录传统构建过程的内容,并将配置和构建步骤的输出保存到日志文件中,这通常很有用。对于我们的 Vim 示例,可以使用以下方法完成: $ ....移植测试 现在让我们讨论如何将测试从参考构建移植到我们的 CMake 构建。 开始 如果正在移植的项目包含测试目标或任何形式的自动化测试或测试脚本,第一步将再次是运行传统的测试步骤并记录使用的命令。...对于你自己的项目,你应该验证安装步骤的结果是否与遗留构建框架的安装目标相匹配。

    34210

    CMake 秘籍(二)

    如何操作 我们将逐步构建CMakeLists.txt文件: 我们首先定义最小 CMake 版本和项目名称。...这将正确识别安装在非标准/custom/location/python目录中的 Python 可执行文件。...这在它们安装在非标准位置或系统上安装了多个版本的情况下尤其如此。CMake 在其版本 3.12 中添加了新的 Python 检测模块,旨在解决这个棘手的问题。...因此,如果 Eigen3 安装在非标准位置,我们可以使用两种替代方法来告诉 CMake 在哪里查找它: 通过传递 Eigen3 的安装前缀作为 CMAKE_PREFIX_PATH: $ cmake -D...如果 Boost 库安装在非标准位置,可以在配置时使用BOOST_ROOT变量传递 Boost 安装的根目录,以指示 CMake 也在非标准路径中搜索: $ cmake -D BOOST_ROOT=/custom

    1.1K20

    面向 C++ 的现代 CMake 教程(五)

    我们将通过回顾章节列表、回顾其内容,并选择其中描述的技巧和工具来开始规划,以构建我们的计算应用程序: 第1章,CMake 的初步步骤: 第一章为我们提供了关于 CMake 的基本信息——如何安装它以及如何使用其命令行构建准备好的项目...本章还告诉我们,禁用源代码构建通常是个好主意,所以我们将会这样做。 第四章,使用目标工作: 在这里,我们强调了现代 CMake 项目如何广泛使用目标。...第十一章 安装和打包: 最后,我们将配置解决方案的安装和打包。我们将准备形成包的文件,以及目标定义。我们将使用GNUInstallDirs模块将该解决方案和构建目标的艺术品安装到适当的目录中。...本书的第二部分教导我们如何使用 CMake 进行构建:如何使用目标,自定义命令,构建类型和生成器表达式。我们深入探讨了编译的技术细节,以及预处理器和优化器的配置。我们讨论了链接,并介绍了不同的库类型。...是一个高级模式,为当前 CMake 生成器的每个构建配置生成一个输出文件。

    38400

    面向 C++ 的现代 CMake 教程(四)

    由于 CMake 完全理解我们想要如何构建目标,它不能支持这些工具中的某些吗?至少是最受欢迎的那些?当然可以!这个珍贵的特性在网络噪声中很难找到,尽管它使用起来如此简单。...在本章中,我们将介绍如何导出目标,以便另一个项目可以在不安装的情况下使用它们,以及如何安装我们的项目,以便它们可以很容易地被系统上的任何程序使用。...作为提醒:构建树是目标/输出目录的路径,源树是您的源代码所在的路径。 无需安装导出 我们如何使项目A的目标对消费项目B可用?...执行基本安装的第一步是将构建好的工件复制到目标目录。 这让我们来到了 install() 命令及其各种模式: install(TARGETS):这会安装输出工件,如库和可执行文件。...然而,目标导出文件是在安装之前生成的,在构建阶段,此时我们不知道安装的工件将去哪里。

    1.1K00

    CMake学习笔记合集

    —–高级编译配置工具 当多个人用不同的语言或者编译器开发一个项目,最终要输出一个可执行文件或者共享库(dll,so等等)这时候神器就出现了—–CMake!...内部构建和外部构建 上述例子就是内部构建,他生产的临时文件特别多,不方便清理 外部构建,就会把生成的临时文件放在build目录下,不会对源文件有任何影响强烈使用外部构建方式 外部构建方式举例 //例子目录...二进制 将构建后的目标文件放入构建目录的 bin 子目录 将 doc 目录 的内容以及 COPYRIGHT/README 安装到/usr/share/doc/cmake/ 将目标文件放入构建目录的 bin.../configure –prefix=/usr 如何安装HelloWord 使用CMAKE一个新的指令:INSTALL INSTALL的安装可以包括:二进制、动态库、静态库以及文件、目录、脚本等 使用CMAKE...安装过程 cmake .. make make install 静态库和动态库的构建 任务: 1,建立一个静态库和动态库,提供 HelloFunc 函数供其他程序编程使用,HelloFunc 向终端输出

    2.3K20

    ninja Compiling the C compiler identification source file CMakeCCompilerId.c fai

    这个错误可能会让您感到困惑,并且不知道如何解决。在本篇博客文章中,我将为您解释这个错误的原因,并提供一些可能的解决方案。 问题背景 CMake是一个跨平台的构建工具,它可以自动生成和管理构建过程。...在使用CMake构建项目时,它会尝试检测您的C编译器以确定它的版本和功能特性。 当CMake执行编译器检测时,它会尝试编译一个源代码文件CMakeCCompilerId.c。...在这个示例代码中,我们使用了find_program命令来查找C编译器,并设置了搜索路径为/usr/bin和/usr/local/bin。如果找不到C编译器,则会输出一个错误消息并中止构建过程。...这段代码可以放置在您项目的根目录下的CMakeLists.txt文件中,当执行cmake命令时,CMake会根据这个配置文件来进行构建。 您可以根据实际情况修改路径以匹配您系统中C编译器的安装路径。...生成的目标文件(通常命名为CMakeCCompilerId.o或CMakeCCompilerId.obj)包含了编译器的相关信息,这些信息将在后续的构建过程中用来配置项目。

    60710

    CMake,大型项目采用的构建工具

    不过在此声明,不要因为CMake的出现,就不学Makefile和autotools。他们三者没有最好的,而是应该看应用场合,然后再去选择。比如只有几个文件的构建,使用Makefile是最好的选择。...如何使用CMake编译工程 一个简单的cmake例子只需要两个文件:CMakeLists.txt和main.c。我们准备一下这两个文件。...(同样随便写点内容,目的是为了规范) 将构建后的目标可执行文件(rice)放入构建目录的bin目录。...最终安装这些文件:将可执行文件(rice)安装至tmp/usr/bin,将doc目录的内容,COPYRIGHT,README安装至、tmp/usr/share/doc/cmake。...) INSTALL指令用于定义安装规则,安装的内容可以包括目标二进制、动态库、静态库以及文件、目录、脚本等。

    1.2K20

    万字总结编译利器CMake,从入门到项目实战演练

    从命令行键入cmake --install进行安装(自3.15中引入,较早版本的CMake必须使用make install),或从IDE构建INSTALL目标。这将安装适当的头文件,库和可执行文件。...解决方案是无论构建类型如何,都将SqrtLibrary的POSITION_INDEPENDENT_CODE目标属性显式设置为True。...生成器表达式可用于启用条件链接,编译时使用的条件定义,条件包含目录等。条件可以基于构建配置,目标属性,平台信息或任何其他可查询信息。 生成器表达式有不同类型,包括逻辑,信息和输出表达式。...(第11步)增加输出配置 在本教程的“(第4步)安装和测试”中,我们添加了CMake的功能,以安装项目的库和头文件。...EXPORT关键字生成并安装一个CMake文件,该文件包含用于从安装树中导入install命令中列出的所有目标的代码。

    1.5K00

    CMake 秘籍(七)

    本章将展示如何使用 CMake 构建代码文档,使用两个流行的框架:Doxygen 和 Sphinx。...我们将演示如何直接使用 Visual Studio 15 2017 构建 CMake 项目,而不使用命令行。我们还将讨论如何在 Linux 或 macOS 系统上跨编译 Windows 可执行文件。...一旦文件夹打开,请注意 CMake 配置步骤是如何自动运行的(底部面板): 现在,我们可以右键单击CMakeLists.txt(右侧面板)并选择“构建”: 这构建了项目(请参见底部面板的输出): 这样就成功编译了可执行文件...在下一个子节中,我们将学习如何定位可执行文件,并可能更改构建和安装路径。...我们还希望知道实际的构建和安装路径,以便我们可以测试我们的可执行文件。

    49300

    CMake构建学习笔记15-组建第一个程序项目

    1 概述 在前文中论述的都是如何使用CMake构建第三方依赖库,不过这些库都是别人的程序项目,那么如何使用CMake组织构建一个属于自己的C/C++程序项目呢?...具体来说,我们在使用CMake构建安装依赖库的时候,会生成诸如“XXXConfig.cmake”的配置文件到安装目录,文件中存在诸如add_library或add_executable等命令,就说明该依赖库的目标导出...如果没有提供目标链接的方式,那么就可以考虑使用传统的头文件和库文件的引入方式,最简单无脑的方式就是使用绝对路径了: # 输出cmake版本提示 message(STATUS "The CMAKE_VERSION...${LibraryPostfix}) 可以看到使用链接目标的方式更加简洁一点,传统的使用传统的头文件和库文件的引入方式要达到跨平台的效果需要配置更多的内容。...其实现在已经可以用IDE可视化构建CMake组建的工程了,具体的过程我们放到下一篇再进行介绍,这一篇的关键在于我们要如何去写CMakeLists.txt文件。

    25910

    成为Oceanbase贡献者(2):源码解读build.sh debug --make 的执行过程

    CMake本身不直接生成可执行文件,而是生成其他构建工具所需的中间文件例如Make能够输出各种各样的makefileMakefile:适合小型项目或需要手动调整构建流程的场景。...CMake通过抽象化的配置文件(CMakeLists.txt),可以轻松生成适用于不同平台的构建系统,从而实现“Write once, run anywhere”的理念CMake 如何管理多个项目的构建...为了使用 CMake 构建一个简单的 "Hello World" C++ 程序,你需要准备两个文件:一个是源代码文件(例如 main.cpp),另一个是 CMake 的构建配置文件(即 CMakeLists.txt...使用 CMake 构建项目完成上述两步后,你就可以使用 CMake 来构建你的项目了。以下是构建步骤:打开命令行界面,导航到包含 CMakeLists.txt 和 main.cpp 文件的目录。...你可以直接运行这个文件来查看输出:.

    20500

    如何使用jsFinder快速全面地获取目标应用的JavaScript文件

    关于jsFinder jsFinder是一款针对JavaScript文件的数据收集工具,该工具基于Go语言开发,是一个命令行工具,在该工具的帮助下,广大研究人员可以快速扫描目标网页以查找HTML源代码中链接的...该工具易于使用,并且支持从文件或标准输入中读取目标URL地址。 于想要查找和分析web应用程序使用的JavaScript文件的web开发人员和安全专业人员非常有用。...功能介绍 1、使用命令行参数从文件或stdin读取URL; 2、对每个URL同时运行多个HTTP GET请求; 3、使用命令参数限制HTTP GET请求的并发性; 4、使用正则表达式在HTTP GET...请求的响应Body中搜索JavaScript文件; 5、参数中指定的文件或名为“output.txt”的默认文件; 6、支持将能够表示程序执行状态的信息打印到命令行窗口或输出文件中; 7、允许程序通过命令参数控制...Verbose模式或静默模式; 工具安装 jsFinder基于Go v1.20开发,因此我们首先需要在本地设备上安装并配置好Go v1.20环境。

    91940

    云课五分钟-03第一个开源游戏复现-贪吃蛇

    CMakeLists.txt文件是用于定义项目的构建规则和设置编译选项的配置文件,它被CMake构建系统使用。...CMake是一个跨平台的构建工具,可以自动生成特定平台的构建脚本,如Makefile或Visual Studio项目文件等,从而方便用户在不同的操作系统和开发环境中使用统一的方式进行构建。...set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin) 这里设置了运行时输出目录,即生成的可执行文件将放置在构建目录下的bin文件夹中...这个CMakeLists.txt文件整体上用于配置一个使用SDL2库和相关库的游戏项目的构建。它设置了项目的基本信息、源代码文件的组织、头文件和库的路径,以及最终的输出目录。...通过这个配置文件,CMake可以生成适用于特定平台的构建脚本,从而简化项目的构建过程。 如果要想顺利使用开源代码,readme.md也必然要读一读的。

    51630
    领券