首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

使用make将C源文件从tree编译到build目录中

是一个常见的编译过程。make是一个常用的构建工具,它可以根据源文件的依赖关系自动化地执行编译、链接等操作。

在这个过程中,我们需要编写一个Makefile文件来描述编译的规则和依赖关系。下面是一个示例的Makefile文件:

代码语言:txt
复制
# 定义编译器和编译选项
CC = gcc
CFLAGS = -Wall -g

# 定义源文件和目标文件的路径
SRCDIR = tree
OBJDIR = build

# 定义源文件和目标文件的列表
SRCS = $(wildcard $(SRCDIR)/*.c)
OBJS = $(patsubst $(SRCDIR)/%.c,$(OBJDIR)/%.o,$(SRCS))

# 定义目标文件的名称
TARGET = $(OBJDIR)/tree

# 默认目标,编译目标文件
all: $(TARGET)

# 编译目标文件
$(TARGET): $(OBJS)
    $(CC) $(CFLAGS) -o $@ $^

# 编译源文件为目标文件
$(OBJDIR)/%.o: $(SRCDIR)/%.c
    $(CC) $(CFLAGS) -c -o $@ $<

# 清理生成的目标文件和可执行文件
clean:
    rm -rf $(OBJDIR)/*.o $(TARGET)

在这个Makefile文件中,我们首先定义了编译器和编译选项。然后定义了源文件和目标文件的路径,使用通配符和模式替换来获取源文件和目标文件的列表。接着定义了目标文件的名称。最后定义了两个规则,分别是编译目标文件和编译源文件为目标文件的规则。同时还定义了一个清理规则,用于清理生成的目标文件和可执行文件。

要使用make进行编译,只需在命令行中执行make命令即可。make会根据Makefile文件中的规则和依赖关系自动执行编译操作,将C源文件从tree编译到build目录中。

推荐的腾讯云相关产品和产品介绍链接地址:

  • 腾讯云容器服务(Tencent Kubernetes Engine,TKE):https://cloud.tencent.com/product/tke
  • 腾讯云云服务器(CVM):https://cloud.tencent.com/product/cvm
  • 腾讯云对象存储(COS):https://cloud.tencent.com/product/cos
  • 腾讯云云数据库 MySQL 版(TencentDB for MySQL):https://cloud.tencent.com/product/cdb_mysql
  • 腾讯云人工智能(AI):https://cloud.tencent.com/product/ai
  • 腾讯云物联网(IoT):https://cloud.tencent.com/product/iot
  • 腾讯云移动开发(Mobile):https://cloud.tencent.com/product/mobile
  • 腾讯云区块链(Blockchain):https://cloud.tencent.com/product/baas
  • 腾讯云元宇宙(Metaverse):https://cloud.tencent.com/product/metaverse

请注意,以上链接仅供参考,具体产品选择应根据实际需求进行评估和决策。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

cmake终极奥义

add_executable:将名为 main.c源文件编译成一个名称为 Demo 的可执行文件 2、开始构建 所有的文件创建完成后,demo1目录应该存在main.c和CMakeLists.txt...(注意,..代表父目录)查看一下build目录,就会发现了生成了编译需要的Makefile以及其他的中间文件。 (3)、运行make构建工程,就会在当前目录(build目录)获得目标文件demo。...更省事的方法是使用 aux_source_directory 命令,该命令会查找指定目录下的所有源文件,然后结果存进指定变量名。...源文件需要编译成一个名称为 demo 的可执行文件。...例如,可以 calc 库设为一个可选的库,如果该选项为 ON ,就使用该库定义的函数来进行运算。否则就调用标准库的运算符进行操作。 还是之前的代码,在此基础上进行增删。

1.3K20

CMake,大型项目采用的构建工具

简化编译构建过程和编译过程,工具链也非常简单:cmake+make。 高效率,比autotools效率快。主要原因:CMake在工具链没有libtool。...SOURCE_LIST 定义的源文件列表 内部构建和外部构建 在上面的例程,我们是采用的内部构建,会看到cmake生成的临时文件比我们编写的源文件还要多,而且在同一级目录下。...外部构建简单理解就是cmake生成的中间文件与源文件分离。不让他们同一级目录。...过程:创建目录build,然后在build目录下执行cmake,构建的中间文件生成build下,这样源文件就很干净。...EXCLUDE_FROM_ALL参数的含义是这个目录编译过程中排除,比如,工程的example,可能就需要工程构建完成后,再进入example目录单独进行构建(当然,你也可以通过定义依赖来解决此类问题

99920

CMake学习笔记合集

内部构建和外部构建 上述例子就是内部构建,他生产的临时文件特别多,不方便清理 外部构建,就会把生成的临时文件放在build目录下,不会对源文件有任何影响强烈使用外部构建方式 外部构建方式举例 //例子目录...,并可以指定中间二进制和目标二进制存放的位置 EXCLUDE_FROM_ALL函数是写的目录编译中排除,如程序的example ADD_SUBDIRECTORY(src bin) src...子目录加入工程并指定编译输出(包含编译中间结果)路径为bin 目录 如果不进行 bin 目录的指定,那么编译结果(包括中间结果)都将存放在build/src 目录 更改二进制的保存路径 SET...目录名以/结尾:这个目录的内容安装到目标路径。...使用外部共享库和头文件 准备工作,新建一个目录使用外部共享库和头文件 [root@MiWiFi-R4CM-srv cmake3]# tree . ├── build ├── CMakeLists.txt

2.2K20

通用Makefile的使用及解析

一、源码使用 1、工程预览 使用 tree 命令查看文件树形结构 example 目录下的文件为待添加 Makefile 的源码,Makefile_and_readme 目录下文件为通用 Makefile..."subdir/"的斜杠"/"不可省略 2. 顶层 Makefile 的 CFLAGS 在编译任意一个 .c 文件时都会使用 3....四、怎么使用这套 Makefile: 1.把顶层 Makefile, Makefile.build 放入程序的顶层目录 在各自子目录创建一个空白的 Makefile 2.确定编译哪些源文件...: 每一个目录下面都有一个名为 Makefile 的文件,在 Makefile 里面指定了哪些文件,哪些目录编译进程序里,我们使用顶层 Makefile.build 这些文件编进程序里。...进入子目录编译: $(subdir-y): make -C $@ -f $(TOPDIR)/Makefile.build # 进入子目录使用顶层目录里面的 Makefile.build编译这个子目录

36220

CMake学习笔记

外部构建,就会把生成的临时文件放在build目录下,不会对源文件有任何影响强烈使用外部构建方式 外部构建方式举例 //例子目录,CMakeLists.txt和上面例子一致 [root@localhost...,并可以指定中间二进制和目标二进制存放的位置 EXCLUDE_FROM_ALL函数是写的目录编译中排除,如程序的example ADD_SUBDIRECTORY(src bin) src...子目录加入工程并指定编译输出(包含编译中间结果)路径为bin 目录 如果不进行 bin 目录的指定,那么编译结果(包括中间结果)都将存放在build/src 目录 更改二进制的保存路径 SET.../结尾:这个目录的内容安装到目标路径 安装过程 cmake .. make make install 静态库和动态库的构建 任务: 1,建立一个静态库和动态库,提供 HelloFunc 函数供其他程序编程使用...使用外部共享库和头文件 准备工作,新建一个目录使用外部共享库和头文件 [root@MiWiFi-R4CM-srv cmake3]# tree . ├── build ├── CMakeLists.txt

2K20

IMX6ULL驱动开发实战连载-02设备树的编译和加载

1.2 编译设备树 这里我们选用的编译设备树的方法是和内核一起编译,内核的设备树都在内核源码/arch/arm/boot/dts/ 目录,我们使用的开发板对应的设备树为imx6ull-seeed-npi.dtb...1.3 加载设备树 编译好的设备树文件拷贝开发板,可以使用SCP或者NFS,替换/boot/dtbs/4.19.71-imx-r1/imx6ull-seeed-npi.dtb。...设备树插件也可以使用DTC工具编译,不过,比较繁琐,容易出错。在虚拟机gitee克隆下野火提供的一键式编译工具。...2.2 内核dtc工具编译设备树插件 编译设备树插件和编译设备树类似,这里使用内核的dtc工具编译编译设备树插件。xxx.dts 编译为 xxx.dtbo。...dtbo的内容catdtbo属性文件。

1.9K20

【分享】在Petalinux编译多个源文件的Linux内核模块,以及扩展Makefile功能

在petalinux工程目录下,使用命令“petalinux-create -t modules --name --enable”,能创建Linux内核模块,包括c源代码文件、Makefile、Yocto...编译的命令是“(MAKE) -C (KERNEL_SRC) M= Linux内核顶层Makefile关于M变量的代码: # Use make M=dir or set the environment variable...如果加上对KERNELRELEASE的检查,前面的Makefile可以改造成既可以在在内核源码目录编译,也可以在在内核源码目录编译。...rm -rf .tmp_versions Modules.symvers endif 实际测试,不加KERNELRELEASE相关语句,也不影响在Linux内核源码目录编译。...如果既不在PetaLinux环境里编译,也不再Linux内核源码目录编译,请再在上面的Makefile文件里定义内核源码目录

6K10

可移植的 Makefile 教程

dependency tree 在上面的图示,“.c” 结尾的文件是事先写好的源文件,而不是由命令生成的文件,所以它们没有先决条件。...更多实际目标,可以作为必要条件加入默认目标。这个 Makefile 的使用者也可以使用 make all 来构建整个项目。 另一个常见的伪目标是 clean,它会移除所有 make 创建的文件。...$ make CC=clang CFLAGS='-O3 -march=native' 如果用户不想在每次调用时指定这些宏,他们可以(小心)使用 make 的 -e 标志环境覆盖宏定义。...第二个 .SUFFIXES .c 和 .o 加到现在是空的后缀列表。...创建的文件 install 安装已编译好的程序,主要任务是完成目标执行文件的拷贝 print 列出改变过的源文件 tar 打包备份源程序,形成tar文件 dist 创建压缩文件,一般tar文件压缩成Z

1.3K10

Cmake学习总结(二)

.): 1、多个源文件使用命令 aux_source_directory(dir var): 在上一篇文章最后结尾的时候,有一个问题,就是在同一目录下面,有多个源文件的时候,这个时候你不能都往下面第三条命令里面一直手动添加源文件...test root@txp-virtual-machine:/home/txp/test# make [100%] Built target main 2、在上面的例子,我们会发现同一目录源文件比较乱...,所以在cmake里面有这样的规则,可以把相同类型以及相关的源文件放到同一个目录,比如说,现在我在test目录下创建test1和test2两个目录文件,并同时把test1.c、test1.h、test2...test1.c test2.c CMakeCache.txt CMakeLists.txt Makefile test1.h test2.h 然后把相关文件一这两个目录文件下去...其实在实际开发工程,一般会把源文件放到src目录下,把头文件放入include文件下,生成的对象文件放入build目录下,最终输出的elf文件会放到bin目录下,这样让人看起来一目了然,哈哈,更多详细情况可以看下期分解

23210

程序员C语言快速上手——工程篇(十三)

: div.c gcc -c div.c # 伪目标,删除所有.o文件 clean: rm *.o cd当前目录,执行输入make命令,即可快速编译生成main.exe程序,当我们需要清理整个工程时...生成的可执行程序拷贝应用安装目录下。...在Linux平台下,通常是C语言的源代码和Makefile脚本一同发布出去,用户只需要在源码目录下分别执行命令makemake install即完成了程序的编译和安装,可以看到,有了make工具后,...cmake -G "MinGW Makefiles" 要注意,以上命令直接在CMD命令行执行可能会报错,它需要一个sh环境,这里有两种解决办法 sh.exe所在目录加入环境变量,它位于MinGW...目录,包括Makefile,然后执行make编译

2.9K30

CC++生态工具链——编译构建工具CMakeCMakeList初探

一般使用过程如下: $ mkdir build $ cd build/ $ cmake .. $ make * 为了不让编译产生的中间文件污染项目的文件结构,专门创建build文件夹进行编译构建。...因此在完成同样的编译任务时,CMake比Make的用法更容易,且屏蔽了Makefile的很多复杂的语法点。...使用样例: link_directories(${SOURCE_DIR}/lib) ---- (9) aux_source_directory 含义:查找指定目录的所有源文件结果存进指定变量名 语法...使用样例: add_compile_options(-std=c++11) ---- (12) add_subdirectory 含义:目录添加到构建范围 语法: add_subdirectory(...使用样例: add_dependencies(log com_log) ---- (15) add_library 含义:添加一个库工程,指定这个库的源文件 语法: add_library(<name

2.1K20

Cmake学习总结(三)

我都可以写成文章出来分享给大家)熟悉我的网友都知道,我也是小白,会很基础的东西开始分享开始,虽然都是比较理论化的东西,但是都是点滴的积累(有的时候,其实你真正在有些项目开发过程,学到的东西不是很多,...SRC_LIST):把当前目录源文件:main.c test1.c test2.c都放到变量SRC_LIST里面去。 include_directories (.....和make命令后,生成的一些配置文件都会在这个目录下,不会在别的目录下,就这样看起来就舒服整洁多了: root@txp-virtual-machine:/home/txp/testmy/build# ls...@txp-virtual-machine:/home/txp/testcmake# ls build lib lib_test 然后在lib_test目录下放我们的源文件test1.c test1....lib目录下我们可以看到生成了生成了静态库和动态库:libtest1.a libtest1.so 2、对库进行链接: 现在我们使用刚才生成的库了。

43230

cmake 简介2021-10-03

build,与in-source build相对,即将编译输出文件与源文件放到不同目录; 三、 基本结构 1,依赖CMakeLists.txt文件,项目主目标一个,主目录可指定包含的子目录...CMake 是一个比 automake 更加容易使用的工具,能够使程序员复杂的编译连接过程解脱出来。...build,与in-source build相对,即将编译输出文件与源文件放到不同目录; 三、 基本结构 1,依赖CMakeLists.txt文件,项目主目标一个,主目录可指定包含的子目录...第三行使用命令 AUX_SOURCE_DIRECTORY 当前目录源文件名称赋值给变量 DIR_SRCS 。...第三行使用命令 AUX_SOURCE_DIRECTORY 当前目录源文件名称赋值给变量 DIR_SRCS 。

28720

零构建 Docker 镜像 | 基于 busybox 制作 | 深入理解 Docker 镜像构建

Docker 内的操作系统是以 动态库、静态库、可执行程序及其他资源文件 形态体现,如CentOS就是CentOS的各种系统库、工具库及程序文件打包成Docker镜像。...# 编译busybox $ make menuconfig #修改配置如下:(空格键勾选) Settings –> Build Options [*] Build static binary(...no share libs) # 编译 $ make -j $((`nproc`-1)) # 这一步会将编译成果整理到 _install 目录下 $ sudo make install 至此,可以看到在..._install 下已经有了我们需要的最基本的目录结构以及配套最基础的 Unix 工具集 : $ tree ..../_install/ ├── bin ├── sbin └── usr ├── bin └── sbin 5 directories Step2: 准备所有资源:# 我们先将目录中所有内容拷贝一个单独的文件夹

83741
领券