程序员自我修养之CMake学习

一、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 : 视频学习

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,098评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,213评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,960评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,519评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,512评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,533评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,914评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,574评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,804评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,563评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,644评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,350评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,933评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,908评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,146评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,847评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,361评论 2 342

推荐阅读更多精彩内容