(1)https://www.jianshu.com/p/9beafc25f27f
(2)https://www.jianshu.com/p/089b458ab8d5
(3)https://www.jianshu.com/p/39fc5e548310
https://www.cnblogs.com/tsingke/p/11223146.html
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(
[version] [EXACT] [QUIET] [MODULE]
[REQUIRED] [[COMPONENTS] [components...]]
[OPTIONAL_COMPONENTS components...]
[NO_POLICY_SCOPE])
这句命令执行后,自动产生了5个变量:
PROJECT_NAME
,值等于http_testPROJECT_SOURCE_DIR
,是CMakeLists.txt
所在目录,通常是项目根目录(奇葩的项目比如protobuf,把CMakeLists.txt放在cmake子目录的也有)PROJECT_BINARY_DIR
,是执行cmake命令时所在的目录,通常是build
一类的用户自行创建的目录。_SOURCE_DIR
,此时同PROJECT_SOURCE_DIR
_BINARY_DIR
,此时同PROJECT_BINARY_DIR
find_package(
REQUIRED
可选字段。表示一定要找到包,找不到的话就立即停掉整个cmake。而如果不指定REQUIRED
则cmake会继续执行。
COMPONENTS
,components
:可选字段,表示查找的包中必须要找到的组件(components),如果有任何一个找不到就算失败,类似于REQUIRED
,导致cmake停止执行。
OPTIONAL_COMPONENTS
和components
:可选的模块,找不到也不会让cmake停止执行
所谓包含文件,例如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}
)//链接到库 注意此处库名称一般要大写