cmake 学习笔记
最近接触到一些工程上的代码,都是用cmake来编译的,每次看着CMakeLists.txt 就各种懵逼,决定从0 开始学习 1 set set(var hello) message(${var}) 输出
其实并不是单单输出hello,还有很多其他信息,会生成很多文件 files 2 CMAKE_C(XX)_FLAGS 变量 CMAKE_C_FLAGS 存放的内容会被传给 C 编译器,作用在所有的编译组态上。如果希望只针对特定一种组态有效,可以设定 CMAKE_C_FLAGS_<编译组态>,例如 CMAKE_C_FLAGS_RELEASE、CMAKE_C_FLAGS_DEBUG。 编译选项为-Wall O3的优化 其他内部变量: •CMAKE_C_COMPILER:指定C编译器 内置变量的使用: •在CMakeLists.txt中指定,使用set 3 CHECK_CXX_COMPILER_FLAG 检查CXX编译器是否支持给定的flag CHECK_CXX_COMPILER_FLAG("-std=c++11" COMPILER_SUPPORTS_CXX11) CHECK_CXX_COMPILER_FLAG("-std=c++0x"COMPILER_SUPPORTS_CXX0X) if(COMPILER_SUPPORTS_CXX11) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11") add_definitions(-DCOMPILEDWITHC11) message(STATUS "Using flag -std=c++11.") elseif(COMPILER_SUPPORTS_CXX0X) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++0x") add_definitions(-DCOMPILEDWITHC0X) message(STATUS "Using flag -std=c++0x.") else() message(FATAL_ERROR "The compiler ${CMAKE_CXX_COMPILER} has no C++11 support. Please use a different C++ compiler.") endif() 上面的代码很直接 4 add_definitions 添加编译参数 将在gcc命令行添加DEBUG 宏定义 ,那么你就可以在你的源文件里面对DEBUG宏来操作 5 ENV 语法: 6 list List 操作 list(LENGTH <list> <output variable>) list(GET <list> <element index> [<element index> ...] <output variable>) list(APPEND <list> [<element> ...]) list(FIND <list> <value> <output variable>) list(INSERT <list> <element_index> <element> [<element> ...]) list(REMOVE_ITEM <list> <value> [<value> ...]) list(REMOVE_AT <list> <index> [<index> ...]) list(REMOVE_DUPLICATES <list>) list(REVERSE <list>) list(SORT <list>) APPEND 追加元素,懂了吧,这些都是list的操作 7 CMAKE_MODULE_PATH cmake 进行搜索的modules的list, 它是一个list 8 find_package 这个有点复杂,还是直接看官方文档 9 include_directories 增加头文件的搜索路径,相当于指定gcc的-I参数 10 add_library add_library(<name> [STATIC | SHARED | MODULE] 增加库的目录 11 target_link_libraries target_link_libraries(<target> [item1 [item2 [...]]] 指令 target_link_libraries()用于指定 target 所需要链接的库,还可以有不同的选项。 target_link_libraries(myapp debug -labc optimized -lxyz ) myapp 在 debug build 时会链接 libabc.a,在 release build 时会链接 libxyz.a,他们的目录被add_library命令添加进去了 12 add_executable 增加可执行文件(从源文件) e.g. add_executable(stereo_euroc Examples/Stereo/stereo_euroc.cc) target_link_libraries(stereo_euroc ${PROJECT_NAME}) stereo_euroc 是要生成的可执行文件,源码是后面的.cc文件,链接后面的库 (编辑:晋中站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |