cmakelists知识点记录

baiyu33博主的深入理解cmake系列写的很好:

(1)https://www.jianshu.com/p/9beafc25f27f

(2)https://www.jianshu.com/p/089b458ab8d5

(3)https://www.jianshu.com/p/39fc5e548310

cmake含义和用法解读:   

https://www.cnblogs.com/tsingke/p/11223146.html

cmake简明教程-半小时从入门到精通:

https://blog.csdn.net/qccz123456/article/details/80639817

cmake_minimum_required(VERSION 3.14)//所要的cmake最低版本
project(http_test)//项目名称
find_package(Ceres REQUIRED)//寻找依赖包
set(CMAKE_CXX_STANDARD 11)//set指令是设定变量的名字和取值,将CMAKE_CXX_STANDARD设置为11,变量在定义的时候直接写名字,使用它的时候则需要用${VAR_NAME}的形式。此外还可以使用系统的环境变量,形式为$ENV{ENV_VAR_NAME},例如$ENV{PATH},$ENV{HOME}等。
include_directories(include)//包含文件或模块
add_executable(http_test main.cpp)//添加可执行文件
target_link_libraries(OSM_A_star_search PUBLIC pthread) //链接到依赖的库文件

 

find_package

find_package( [version] [EXACT] [QUIET] [MODULE]
[REQUIRED] [[COMPONENTS] [components...]]
[OPTIONAL_COMPONENTS components...]
[NO_POLICY_SCOPE])

这句命令执行后,自动产生了5个变量:

  • PROJECT_NAME,值等于http_test
  • PROJECT_SOURCE_DIR,是CMakeLists.txt所在目录,通常是项目根目录(奇葩的项目比如protobuf,把CMakeLists.txt放在cmake子目录的也有)
  • PROJECT_BINARY_DIR,是执行cmake命令时所在的目录,通常是build一类的用户自行创建的目录。
  • http_test_SOURCE_DIR,此时同PROJECT_SOURCE_DIR
  • http_test_BINARY_DIR,此时同PROJECT_BINARY_DIR

find_package()要看CMAKE_MODULE_PATH或cmake安装路径下是否有Find.cmake脚本存在,并且这个脚本是否能正确的找到包。如果上述两个位置不存在Find.cmake,或者这个Find.cmake执行失败,则进入config模式。

REQUIRED可选字段。表示一定要找到包,找不到的话就立即停掉整个cmake。而如果不指定REQUIRED则cmake会继续执行。

COMPONENTScomponents:可选字段,表示查找的包中必须要找到的组件(components),如果有任何一个找不到就算失败,类似于REQUIRED,导致cmake停止执行。

OPTIONAL_COMPONENTScomponents:可选的模块,找不到也不会让cmake停止执行

 

include

所谓包含文件,例如include(utils.cmake),把当前路径下的utils.cmake包含进来,基本等同于C/C++中的#include指令。通常,include文件的话文件应该是带有后缀名的。
所谓包含模块,比如include(xxx),是说在CMAKE_MODULE_PATH变量对应的目录,或者CMake安装包自带的Modules目录(比如mac下brew装的cmake对应的是/usr/local/share/cmake/Modules)里面寻找xxx.cmake文件。注意,此时不需要写".cmake"这一后缀。

 

添加新库

1.  find_package(NLopt REQUIRED) //找到package

2.  include_directories(

${NLOPT_INCLUDE_DIR}

) //包含头文件

3.  target_link_libraries(test

${NLOPT_LIBRARIES}

)//链接到库 注意此处库名称一般要大写

你可能感兴趣的:(C++)