cmake简洁教程 - 第二篇

这是博客cmake简洁教程的第二篇,主要介绍如何使用cmake编译多个源文件,以及编译多目录下的源文件

cmake简洁教程的全部篇章链接如下

cmake简洁教程 - 第一篇_YZF_Kevin的博客-CSDN博客

@H_404_9@如何使用cmake编译多个源文件

类似上篇博客,但这次我们又添加了fun1.c,  fun1.h,  fun2.c,  fun2.h 四个文件,现在目录如下图

 其中func1.h,  func1.c文件内容如下(分别是函数func1()的声明和实现)

#pragma once

void func1();
#include <stdio.h>
#include "func1.h"
void func1()
{
    printf("this is func1() \n");
}

其中func2.h,  func2.c文件内容如下(分别是函数func2()的声明和实现)

#pragma once

void func2();
#include <stdio.h>
#include "func2.h"
void func2()
{
    printf("this is func2() \n");
}

其中main.c文件内容如下(包含头文件后,分别调用函数func1() 和 函数func2())

#include <stdio.h>
#include "func1.h"
#include "func2.h"
int main(void)
{
        printf("Hello World\n");
        func1();
        func2();
        return 0;
}

我们编辑CMakeLists.txt文件内容如下

cmake_minimum_required (VERSION 3.5)
project (demo)
add_executable(main main.c func1.c func2.c)

@H_404_9@重点:add_executable()命令中指明要使用的源文件是main.c, fun1.c, fun2.c

好了,我们再依次执行命令 @H_404_9@cmake . 和命令 @H_404_9@make ,可以看到目标文件就被编译出来了,如下图

 执行命令 @H_404_9@./main 可以看到,如我们预料,成功调用了func1() 和 func2()

依次类推,如果我们需要编译100个源文件,那就需要在@H_404_9@add_executable()命令中添加所有的源文件,而且一旦我们新加了代码文件,就要修改CMakeLists.txt文件重新生成makefile,这个做法太low了,有没有比较优雅的方法呢?

新命令 @H_404_9@aux_source_directory(dir var)  

意思是把目录 dir 里面的所有源文件(即.c和.cpp文件)都放在变量 var 中

好了,我们改造上面这个例子,重新编辑CMakeLists.txt文件内容如下

cmake_minimum_required (VERSION 3.5)
project (demo)
aux_source_directory(. SRC_FILES)
add_executable(main ${SRC_FILES})

注意:

第3行的意思是把当前目录的所有源文件都放在变量SRC_FILES中

第4行的意思是编译目标文件main时,使用的源文件是变量SRC_FILES代表的源文件列表

重新执行命令 @H_404_9@cmake . 和 @H_404_9@make ,依然可以成功,如下图

因为@H_404_9@aux_source_directory(dir var) 是把目录下的所有源文件都加入到了变量var中,如果我们不想编译某些源文件呢?

还有一个set命令,例如

set( SRC_FILES main.c testFunc1.c testFunc.c)

意思是给把3个源文件(main.c testFunc1.c testFunc.c)赋给变量 SRC_FILES,接下来正常使用变量 SRC_FILES 即可,还是上面的例子,改造如下

cmake_minimum_required (VERSION 3.5)
project (demo)
set (SRC_FILES main.c func1.c func2.c)
add_executable(main ${SRC_FILES})

重新执行命令 cmake .     make    ./main,一样可以成功

@H_404_9@本篇总结(2个新命令,1个旧命令的新用法

旧命令

add_executable(main main.c func1.c func2.c)   有多个源文件时,多个源文件中间用空格分开

add_executable(main SRC_FILES )  使用指定变量 SRC_FILES代表的源文件来编译可执行文件

新命令
1. aux_source_directory(dir var)   把目录dir里面的所有源文件(即.c和.cpp文件)都放在变量 var 中
2. set( SRC_FILES main.c testFunc1.c testFunc.c)  把指定源文件赋给变量 SRC_FILES

下一篇我们将会讲解更正规的cmake用法

相关文章

显卡天梯图2024最新版,显卡是电脑进行图形处理的重要设备,...
初始化电脑时出现问题怎么办,可以使用win系统的安装介质,连...
todesk远程开机怎么设置,两台电脑要在同一局域网内,然后需...
油猴谷歌插件怎么安装,可以通过谷歌应用商店进行安装,需要...
虚拟内存这个名词想必很多人都听说过,我们在使用电脑的时候...