0
点赞
收藏
分享

微信扫一扫

一个java程序员的CMake之旅

东林梁 2023-06-15 阅读 37
c++

文章目录

1.概述

2.注释

  • 单行注释:#
  • 多行注释:#[[ ]]

3.命令

2.1cmake_minimum_required

  • 语法:cmake_minimum_required(版本号)
  • 例如:cmake_minimum_required (VERSION 2.8)

2.2project

  • 语法:project(项目名称)
# PROJECT 指令的语法是:
project(<PROJECT-NAME> [<language-name>...])
project(<PROJECT-NAME>
       [VERSION <major>[.<minor>[.<patch>[.<tweak>]]]]
       [DESCRIPTION <project-description-string>]
       [HOMEPAGE_URL <url-string>]
       [LANGUAGES <language-name>...])
  • 例如:project (Demo2)

2.3add_executable

  • 语法:add_executable(可执行文件名称,源文件列表)
  • 例如:add_executable(demo, main.cpp, demo.cpp)

2.4aux_source_directory

  • 语法:aux_source_directory(<dir> <variable>)
  • 例如:aux_source_directory(. DIR_SRCS);

2.5file

  • 语法:file(GLOB/GLOB_RECURSE 变量名 要搜索的文件路径和文件类型)
    • GLOB: 将指定目录下搜索到的满足条件的所有文件名生成一个列表,并将其存储到变量中。
    • GLOB_RECURSE:递归搜索指定目录,将搜索到的满足条件的文件名生成一个列表,并将其存储到变量中。

2.6include_directories

2.7制作静态库或者动态库

2.7.1制作静态库

  • 语法:add_library(库名称 STATIC Makefile地址)
  • 例子:add_library(cale STATIC ${SRC_LIST})

2.7.2制作动态库

  • 语法:add_library(库名称 SHARED 源文件1 [源文件2] ...)
  • 例子:add_library(cale SHARED ${SRC_LIST})

2.6set

2.6.1 语法:

# SET 指令的语法是:
# [] 中的参数为可选项, 如不需要可以不写
SET(变量名 变量值 [CACHE TYPE DOCSTRING [FORCE]])
  • 例如:set(SRC_LIST main.cpp a.cpp b.cpp)

2.6.2 如何使用变量:`

2.6.3指定使用的C++版本

#增加-std=c++11
set(CMAKE_CXX_STANDARD 11)
#增加-std=c++14
set(CMAKE_CXX_STANDARD 14)
#增加-std=c++17
set(CMAKE_CXX_STANDARD 17)
  • 在执行 cmake 命令的时候指定出这个宏的值(通常不用)
#增加-std=c++11
cmake CMakeLists.txt文件路径 -DCMAKE_CXX_STANDARD=11
#增加-std=c++14
cmake CMakeLists.txt文件路径 -DCMAKE_CXX_STANDARD=14
#增加-std=c++17
cmake CMakeLists.txt文件路径 -DCMAKE_CXX_STANDARD=17

2.6.4指定输出的路径

set(EXECUTABLE_OUTPUT_PATH 路径)

2.6.5变量操作

2.7message

  • 语法:message([STATUS|WARNING|AUTHOR_WARNING|FATAL_ERROR|SEND_ERROR] 输出内容|变量)
  • 例如:message(WARNING "这是一个警告")

2.8链接静态库文件

  • 连接库语法:link_libraries(<static lib> [<static lib>...])
    • 参数1:指定出要链接的静态库的名字,可以是全名 libxxx.a,也可以是掐头(lib)去尾(.a)之后的名字 xxx
    • 参数 2-N:要链接的其它静态库的名字
  • 链接库文件语法:link_directories(<lib path>)

2.9链接动态库文件

  • 语法:target_link_libraries(可执行文件名称 库名称...)
    • 可执行文件名称: 对应的是最终生成的可执行程序的名字
    • 库名称:这是可执行程序要加载的动态库,这个库是系统提供的线程库,全名为 libpthread.so,在指定的时候一般会掐头(lib)去尾(.so)。

4.生成可执行文件

  • 执行cmake ./CMakeLists.txt所在的路径
  • 生成Makefile后,执行make
  • 生成可执行文件
举报

相关推荐

0 条评论