2024年Linux Makefile:使用CMake生成Makefile文件_cmake写makefile

#include <stdio.h>

#include “testFunc.h”

int main(void)
{
func(100);

return 0;

}


修改CMakeLists.txt,在add\_executable的参数里把testFunc.c加进来



cmake_minimum_required(VERSION 2.8)

project(demo)

add_executable(main main.c testFunc.c)


然后重新执行`cmake .`生成Makefile并运行make:  
 ![在这里插入图片描述](https://img-blog.csdnimg.cn/20200519171735164.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NDQ5ODMxOA==,size_16,color_FFFFFF,t_70)  
 然后运行重新生成的elf文件main:  
 ![在这里插入图片描述](https://img-blog.csdnimg.cn/20200519171744514.png)


运行成功!可以类推,如果在同一目录下有多个源文件,那么只要在`add_executable`里把所有源文件都添加进去就可以了。但是如果有一百个源文件,再这样做就有点坑了,无法体现cmake的优越性,cmake提供了一个命令可以把指定目录下所有的源文件存储在一个变量中,这个命令就是`aux_source_directory(dir var)`。第一个参数dir是指定目录,第二个参数var是用于存放源文件列表的变量。


我们在main.c所在目录下再添加2个文件,testFunc1.c和testFunc1.h。添加完后整体文件结构如下:  
 ![在这里插入图片描述](https://img-blog.csdnimg.cn/20200519171759263.png)


testFunc1.c如下:



/*
** testFunc1.c
*/

#include <stdio.h>
#include “testFunc1.h”

void func1(int data)
{
printf(“data is %d\n”, data);
}


testFunc1.h如下:



/*
** testFunc1.h
*/

#ifndef _TEST_FUNC1_H_
#define _TEST_FUNC1_H_

void func1(int data);

#endif


再修改main.c,调用testFunc1.h里声明的函数func1():



#include <stdio.h>

#include “testFunc.h”
#include “testFunc1.h”

int main(void)
{
func(100);
func1(200);

return 0;

}


修改CMakeLists.txt:



cmake_minimum_required(VERSION 2.8)

project(demo)

aux_source_directory(. SRC_LIST)

add_executable(main ${SRC_LIST})


使用`aux_source_directory`把当前目录下的源文件存列表存放到变量`SRC_LIST`里,然后在`add_executable`里调用`SRC_LIST`(注意调用变量时的写法)。再次执行`cmake .`和`make`,并运行main:  
 ![在这里插入图片描述](https://img-blog.csdnimg.cn/202005191718541.png?x-oss
  • 17
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值