自动构建之CMake

这篇具有很好参考价值的文章主要介绍了自动构建之CMake。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

CMake

链接: 自动构建之MakeFile

CMake也是一种用于自动化构建软件项目的工具。Cmake可以自动输出MakeFile文件,并且CMake是一个跨平台的构建系统,对于复杂的、跨平台的项目,CMake可能是一个更好的解决方案。

CMake的脚本文件是在CMakeLists.txt中,例如

自动构建之CMake

# 单个目录实现
# CMake 最低版本号要求
cmake_minimum_required (VERSION 2.8)
# 工程,他不是执行文件名
PROJECT(0VOICE)
# 手动加入文件 ${变量名}} ,比如${SRC_LIST}
SET(SRC_LIST main.c)
SET(SRC_LIST2 main2.c)
# MESSAGE和echo类似 
MESSAGE(STATUS "THIS IS BINARY DIR " ${PROJECT_BINARY_DIR})
MESSAGE(STATUS "THIS IS SOURCE DIR " ${PROJECT_SOURCE_DIR})

# 生产执行文件名0voice  0voice2
ADD_EXECUTABLE(0voice ${SRC_LIST})
ADD_EXECUTABLE(0voice2 ${SRC_LIST2})

在当前文件夹下可以使用**cmake .**来编译代码。编译完之后会生成我们的MakeFile文件。

自动构建之CMake

但是这样生成的中间文件太多了,和代码文件混在一个文件夹中。更常见的做法是,首先在目录下创建一个build文件夹,然后在build文件夹下执行**cmake …**来编译文件。

自动构建之CMake

语法

示例:文章来源地址https://www.toymoban.com/news/detail-455429.html

cmake_minimum_required(VERSION 2.6)
PROJECT(loginserver)

AUX_SOURCE_DIRECTORY(./ SRC_LIST)

#SET(LIBRARY_OUTPUT_PATH ./)
SET(EXECUTABLE_OUTPUT_PATH  ./)
if(APPLE)
    SET(PB_LIB_DIR ../base/pb/lib/mac)
elseif(UNIX)
    SET(PB_LIB_DIR ../base/pb/lib/linux)
endif()

ADD_DEFINITIONS( -g -W -Wall -D_REENTRANT -D_FILE_OFFSET_BITS=64 -DAC_HAS_INFO
-DAC_HAS_WARNING -DAC_HAS_ERROR -DAC_HAS_CRITICAL -DTIXML_USE_STL
-DAC_HAS_DEBUG -DLINUX_DAEMON -std=c++11)

INCLUDE_DIRECTORIES(./ ../base ../base/pb/protocol ../base/jsoncpp/ ../base/pb/ ../protobuf/include)
LINK_DIRECTORIES(./ ../base ${PB_LIB_DIR} ../base/slog/lib)

#ADD_XXXX必须在TARGET_LINK_LIBRARIES前面,否则会报错
#ADD_LIBRARY(${PROJECTNAME} SHARED/STATIC ${SRC_LIST})
ADD_EXECUTABLE(login_server ${SRC_LIST})

TARGET_LINK_LIBRARIES(login_server base protobuf-lite slog pthread)
  • PROJECT(loginserver):定义工程名称为loginserver;
  • AUX_SOURCE_DIRECTORY(./ SRC_LIST):将当前目录所有源代码文件存储在SRC_LIST中。
  • SET(EXECUTABLE_OUTPUT_PATH ./):定义变量EXECUTABLE_OUTPUT_PATH为./;这里目的是保存一个文件夹地址。
  • SET(PB_LIB_DIR …/base/pb/lib/linux):将变量PB_LIB_DIR 定义为…/base/pb/lib/linux;这里目的也是保存一个文件夹地址。
  • ADD_DEFINITIONS( -g -W -Wall -D_REENTRANT -D_FILE_OFFSET_BITS=64 -DAC_HAS_INFO
    -DAC_HAS_WARNING -DAC_HAS_ERROR -DAC_HAS_CRITICAL -DTIXML_USE_STL
    -DAC_HAS_DEBUG -DLINUX_DAEMON -std=c++11):向编译器添加编译选项和预处理器定义。
    • -g:生成的可执行文件会带调试信息,生成调试执行文件时使用
    • -W:启用所有编译器警告
    • -Wall:启用几乎所有编译器警告
    • -D_REENTRANT:定义宏,表示使用多线程支持的库函数版本。
    • -D_FILE_OFFSET_BITS=64:定义宏,表示使用64位文件偏移量。
    • -DAC_HAS_INFO:定义宏,启用信息级别的日志记录。
    • -DAC_HAS_WARNING :定义宏,启用警告级别的日志记录。
    • -DAC_HAS_ERROR :定义宏,启用错误级别的日志记录。
    • -DAC_HAS_CRITICAL :定义宏,启用关键级别的日志记录。
    • -DTIXML_USE_STL:定义宏,表示使用C++标准库(STL)版本的TinyXML库。
    • -DAC_HAS_DEBUG :定义宏:表示启用某些调试级别的日志记录。
    • -DLINUX_DAEMON :定义宏,表示程序将作为Linux守护进程运行。
    • -std=c++11:指定使用C++11标准进行编译。
  • INCLUDE_DIRECTORIES(./ …/base …/base/pb/protocol …/base/jsoncpp/ …/base/pb/ …/protobuf/include):引入多个头文件搜索路径。引入的是一些非标准(非系统头文件)的头文件。
  • LINK_DIRECTORIES(./ …/base ${PB_LIB_DIR} …/base/slog/lib):引入非标准的库文件搜索路径。
  • ADD_EXECUTABLE(login_server ${SRC_LIST}):定义这个工程会生成一个文件名为login_server 的可执行文件,相关的源文件是SRC_LIST中定义的源文件目录。
  • TARGET_LINK_LIBRARIES(login_server base protobuf-lite slog pthread)::为将生成的可执行文件添加需要链接的共享库。

到了这里,关于自动构建之CMake的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Linux】项目自动化构建工具 —— make/Makefile

    前言: 在上一期的博文中,我们对 Linux 下的编译器 - gcc/g++的使用进行了详细的讲解,今天我将给大家讲解的是关于  【Linux】项目自动化构建工具 —— make/Makefile  的详细使用教程!! 本文目录 (一)前情摘要 (二)背景介绍 1、Makefile 的基本认识 2、make 的基本认识 3、

    2023年04月19日
    浏览(60)
  • 【Linux】项目自动化构建工具 - make/Makefile

    会不会写makefile,从侧面说明了一个人是否具备完成大型工程的能力。 一个工程中的源文件不计数,其按类型、功能、模块分别放在若干个目录中,makefile定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的

    2024年02月04日
    浏览(48)
  • [Linux 基础] make、Makefile自动化构建工具

    make是一个命令,Makefile是一个在当前目录下存在的一个具有特定格式的文本文件。 在VS编译器中,我们在编译执行代码的时候ctrl+f5就可以了,而在linux中我们需要使用gcc/g++ 配合选项并需要正确的格式才可以完成编译,这样是比较麻烦的,我们make与Makefile可以实现自动化构建

    2024年02月06日
    浏览(38)
  • 【Linux】项目自动化构建工具make/makefile

    🏖️作者:@malloc不出对象 ⛺专栏:Linux的学习之路 👦个人简介:一名双非本科院校大二在读的科班编程菜鸟,努力编程只为赶上各位大佬的步伐🙈🙈 本篇文章我们将要讲解的是项目自动化构建工具make与makefile。 一、make/makefile的背景 会不会写makefile,从一个侧面说明了一

    2024年02月03日
    浏览(53)
  • Linux---(六)自动化构建工具 make/Makefile

    make是一个命令。 Makefile是一个在当前目录下存在的一个具有特定格式的文本文件。 🎗️会不会写Makefile,从一个侧面说明了一个人是否具备完成大型工程的能力。 🎗️一个工程中的源文件数不胜数,其按照类型、功能、模块分别放在若干个目录中,Makefile定义了一系列的规则

    2024年02月05日
    浏览(43)
  • 【Linux】自动化构建工具-make/Makefile详解

     前言 大家好吖,欢迎来到 YY 滴 Linux系列 ,热烈欢迎! 本章主要内容面向接触过Linux的老铁,主要内容含 欢迎订阅 YY 滴Linux专栏!更多干货持续更新!以下是传送门!  订阅专栏阅读:YY的《Linux》系列 ❀❀❀❀❀ 【Linux系列-P1】 Linux环境的搭建 【Linux系列-P2】Linux的基本知

    2024年02月16日
    浏览(37)
  • Linux:项目自动化构建工具——make/Makefile

    前言: 本章主要内容有认识与学习 Linux 环境下如何使用项目自动化构建工具—— make/makefile 。 当我们编写一个较大的软件项目时,通常需要将多个源文件编译成可执行程序或库文件。为了简化这个过程,我们可以使用 make 工具和 Makefile 文件。 Makefile 文件可以帮助我们 自动

    2024年02月13日
    浏览(40)
  • STM32 裸机编程 04 - Makefile 构建自动化

    我们可以用  make  命令行工具替代手动敲入“编译”、“链接”、“烧写”这些命令,自动完成整个过程。 make  工具使用一个名为  Makefile  的配置文件,从中读取执行动作的指令。这种自动化方式非常棒,因为这样可以把构建固件的过程、使用了哪些编译标记等也文档化

    2024年02月07日
    浏览(36)
  • Linux--自动化的构建项目:make、Makefile

    make是一个命令 Makefile是一个文件 Makefile的构成: ①依赖关系 ②依赖方法 编写Malefile文件的最终目标是生成项目,换句话说就是,想让Makefile把我的源代码编译,自动形成可执行文件 示例: 注:.PHONY这个的作用是,修饰对象总是被执行(例如:即使已删除,但依旧可以

    2024年02月12日
    浏览(35)
  • [Linux 基础] make、Makefile自动化构建代码工具

    make是一个命令,Makefile是一个在当前目录下存在的一个具有特定格式的文本文件。 在VS编译器中,我们在编译执行代码的时候ctrl+f5就可以了,而在linux中我们需要使用gcc/g++ 配合选项并需要正确的格式才可以完成编译,这样是比较麻烦的,我们make与Makefile可以实现自动化构建

    2024年02月08日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包