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文件,链接后头的库 (编辑:湖南网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |