CMakeLists.txt编写规则

一、基本语法

语法格式:指令(参数1 参数2...)

1)参数间用空格或分号隔开

2)指令大小写无关,参数和变量大小写相关

3)变量用${}方式取值,但在if语句中直接用变量名

二、重要指令

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

        语法: cmake_minimum_required(VERSION VersionNumber)

例:

#CMake最小版本要求为2.8.3

cmake_minimun_required(VERSION 2.8.3)

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

        语法:project(projectname [CXX] [C] [Java]) 

3.set - 定义变量

        语法:set(VAR [VALUE] [CACHE TYPE DOCSTRING [FORCE]])

例:

#定义SRC变量,其值为hello.cpp bye.cpp

set(SRC hello.cpp bye.cpp)

4.include_directories - 添加多个指定的头文件搜索路径 --> 相当于gcc的-I选项

        语法:include_directories(dir1 dir2...)

5.link_directories - 添加多个指定的库文件搜索路径 --> 相当于gcc的-L选项

        语法:link_directories(dir1 dir2...)

6.add_library - 生成库文件

        语法:add_library(libname [SHARED|STATIC|MODULE] source1 source2...)

例:

#通过SRC变量生成libsort.so动态库

add_library(sort SHARED ${SRC})

7.add_compile_options - 添加编译选项

        语法:add_compile_options(<option>...)

例:

#添加编译选项 -g -O2 

add_compile_options(-g -O2)

8.add_executable - 生成可执行文件

        语法:add_executable(exename src1 src2...)

例:

#编译main.cpp func.cpp生成test

add_executable(test main.cpp func.cpp)

9.target_link_libraries - 为target添加需要链接的库 --> 相当于gcc的-l选项

例:

#将libsort.a(so)链接到可执行文件test

target_link_libraries(test sort)

 注意:添加库之前target必须已经生成,即add_executable(test)必须在target_link_libraries(test)前面.

10.add_subdirectory - 向当前工程添加存放源文件的子目录,并可指定二进制文件存放的位置

        语法:add_subdirectory(src_dir [binary_dir] [EXCLUDE_FROM_ALL])

#添加src子目录,src中需有一个CMakeLists.txt

add_subdirectory(src)

11.aux_source_directory - 发现一个目录下所有源文件并将列表存储在一个变量中

        语法:aux_source_directory(dir VARIABLE)

#定义SRC变量,其值为当前目录下所有源文件

aux_source_directory(. SRC) 

三、常用变量

1.CMAKE_C_FLAGS 相当于gcc

2.CMAKE_CXX_FLAGS 相当于g++

#在上述变量中追加编译选项

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

3.CMAKE_BUILD_TYPE 编译类型

#设定编译类型为Debug或Release

set(CMAKE_BUILD_TYPE Debug)

 set(CMAKE_BUILD_TYPE Release)

四、构建方式

总体编译规则的CMakeLists放在项目顶层文件夹,cmake的方式有两种:

1.内部构建:不推荐

直接在顶层文件夹执行cmake .这样构建会在顶层文件夹产生大量中间文件,使文件夹杂乱无章.

2.外部构建:推荐

#在顶层目录创建build文件夹并进入

mkdir build && cd build

#编译上级目录的CMakeLists.txt

cmake ..

#执行make

make

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
CMakeLists.txt文件是用于管理C代码编译的工具。通过使用cmake命令,可以将CMakeLists.txt文件的定义转换成编译所需的makefile文件,再使用make命令编译可生成可执行文件。这样可以方便地管理C代码的编译过程。 在使用CMakeLists.txt文件进行C程序的编译时,可以按照以下几种方式进行编译: 1. 单独编译main.cpp文件:这种方式适用于只有一个源文件的情况,可以直接在CMakeLists.txt文件指定编译的源文件和生成的可执行文件的名称。 2. 编译一组cpp和h文件:如果有多个cpp和h文件需要编译,可以在CMakeLists.txt文件使用add_executable命令指定编译的源文件,然后使用target_link_libraries命令链接需要的库文件。这样可以将多个源文件编译成一个可执行文件。 3. 编译多组cpp和h文件:如果有多组cpp和h文件需要编译,可以在CMakeLists.txt文件使用add_subdirectory命令指定需要编译的子目录,并在子目录CMakeLists.txt文件进行具体的编译设置。这样可以将多组源文件编译成多个可执行文件。 通过使用CMakeLists.txt文件进行编译,可以更加灵活地管理C代码的编译过程,使代码结构更清晰,便于维护和管理。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [CMake编译工程/第一个CMakeLists.txt(最详细案例演示)](https://blog.csdn.net/weixin_42322256/article/details/124191696)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [编写CMakeLists.txt文件进行C++程序的cmake编译](https://blog.csdn.net/qq_39400324/article/details/124356401)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [C++版本使用CMakeLists.txt编译(同目录多个源文件)可执行文件](https://download.csdn.net/download/Zhangyanfeng1/12603209)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值