美文网首页
程序员自我修养之CMake学习

程序员自我修养之CMake学习

作者: 巴菲伟 | 来源:发表于2022-01-15 19:26 被阅读0次

一、CMake的前序

    CMake是一个跨平台的安装编译工具,可以用简单的语句来描述所有平台的安装(编译过程),可以说已经成为大部分C++开源项目标配

    CMake  =  C、C++(编译器指令gcc)+ 语法,可以搭建更加完善的NDK的环境,我们来从入门快速搭建属于自己的环境。

二、CMake的常用指令介绍

       1、cmake_minimum_required - 指定CMake的最小版本要求

            cmake_minimum_required(VERSION 3.20)  

            #CMake的最小的版本号为3.2.0

        2、project - 定义工程名称,并可指定工程支持的语言  

               project(untitled3 CXX  C  Java) 

               #CMake默认支持所有语言,untitled3只支持C++(CXX) 、C 、JAVA三种语言

        3、set - 显式的定义变量  

            set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g -Wall -O2")

            #CMAKE_CXX_FLAGS 是系环境统变量,后续会介绍更多

            # “$“ 代表拿到CMAKE_CXX_FLAGS变量的取值,然后于 -g -Wall -O2进行数值拼接

            # ${CMAKE_CXX_FLAGS}拿到值为-std=c++14, 加上 -g -Wall -O2后,CMAKE_CXX_FLAGS系统环境变量为-std=c++14 -g  -Wall  -O2

             # -g  :  代表g++可以调试

             # -Wall :   代表g++编译后有警告信息       

             # -O2 : 代表g++编译优化

             # -std=c++14 : 代表C++编译环境是C++14的版本      

        4、add_compile_options - 添加编译参数

            add_compile_options(-Wno-unused-value -Wno-unused-variable -Wno-missing-braces)

            # 与set CMAKE_CXX_FLAGS 变量效果一样

        5、include_directories - 向工程添加多个特定的头文件搜索路径 

              相当于指定g++编译器的-I参数 

            include_directories(${CMAKE_SOURCE_DIR}/include)

            # CMAKE_SOURCE_DIR代表当前CMake的当前绝对路径,/Users/zhangsan/CLionProjects/untitled3后续会统一介绍系统环境变量,加上这个语法,再导入库只是导入相对路径而不是绝对路径

        6、link_directories - 向工程添加多个特定的库文件搜索路径(用的较少)

        7、add_subdirectory - 向当前工程添加存放源文件的子目录

            添加子目录一定要有CMakeLists.txt文件

             add_subdirectory(samples)

             # 在第一个CMake(untitled3)添加第二个子编译目录(samples),这个也叫subModule模式

        8、add_library - 预编译库

             add_library(slib STATIC) : STATIC生成静态库,后缀名 .a

            add_library(dynlib SHARED)  : SHARED生成动态库, 后缀名 .so 和 .dylib

             # slib会生成静态库,dynlib会生成动态库

        9、target_sources - 资源文件编译成库,与add_library一起使用

            # slib.cpp 资源文件生成slib静态库

            # 把dynlib.cpp资源文件生成dynlib动态库

        10、add_executable - 生成可执行文件

             add_executable(helloworld)

            # 生成helloworld可执行文件,类似于.exe执行程序

        11、target_link_libraries - 将目标文件与库文件进行链接

                target_link_libraries(helloworld PRIVATE slib dynlib)

                # helloworld 执行程序链接slib、dynlib库

        12、target_include_directories - 将目标文件添加头文件目录,它与target_link_libraries经常一起连用

            target_include_directories(slib INTERFACE ${CMAKE_CURRENT_SOURCE_DIR})

            target_include_directories(dynlib INTERFACE ${CMAKE_CURRENT_SOURCE_DIR})

            # PRIVATE : 只在slib、dynlib库里面添加slib和dynlib的头文件的路径

            # INTERFACE : 在slib、dynlib库里面添加路径,引用方也会引用他们库文件路径,原因是target_link_libraries语法导致的。例如:helloworld里面使用target_link_libraries来引用slib和dynlib,同时就会包含slib和dynlib的头文件的路径。

            # PUBLIC = PRIVATE + INTERFACE 

        13、list : 在变量后面追加新的值

                set (A  1)

                list(APPEND A   2 )

                # A 现在的值为1、2

        14、function : Cmake中函数的定义

三、变量文档总结

    CMake文档大全 : https://www.cnblogs.com/52php/p/5684588.html

    谷歌文档:https://cmake.org/cmake/help/v3.0/manual/cmake-commands.7.html

    项目工程: https://github.com/zhang1shun1wei/CMakeProject  一定运行hellowrold执行文件

    https://www.bilibili.com/video/BV1cQ4y1K7PD/?spm_id_from=pageDriver : 视频学习

相关文章

网友评论

      本文标题:程序员自我修养之CMake学习

      本文链接:https://www.haomeiwen.com/subject/ctlthrtx.html