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

如何编写一个makefile,其中编译的目标文件位于不同的目录中,并具有不同的名称?

编写一个makefile,其中编译的目标文件位于不同的目录中,并具有不同的名称,可以按照以下步骤进行:

  1. 创建一个名为"makefile"(或者"Makefile")的文本文件,确保它位于项目的根目录下。
  2. 在makefile中定义目标文件的路径和名称。假设我们有两个目标文件,分别位于"src1"和"src2"目录下,分别命名为"target1"和"target2",可以按照以下方式定义:
代码语言:txt
复制
target1: src1/target1.c
    gcc -o build/target1 src1/target1.c

target2: src2/target2.c
    gcc -o build/target2 src2/target2.c

在上述示例中,我们使用gcc编译器将源文件编译为目标文件,并将目标文件放置在"build"目录下。

  1. 定义一个"all"目标,用于编译所有目标文件。可以按照以下方式定义:
代码语言:txt
复制
all: target1 target2

在上述示例中,我们将"target1"和"target2"作为依赖项,表示在编译"all"目标之前,需要先编译这两个目标文件。

  1. 定义一个"clean"目标,用于清理生成的目标文件和中间文件。可以按照以下方式定义:
代码语言:txt
复制
clean:
    rm -rf build/*

在上述示例中,我们使用"rm"命令删除"build"目录下的所有文件和子目录。

完整的makefile示例代码如下:

代码语言:txt
复制
target1: src1/target1.c
    gcc -o build/target1 src1/target1.c

target2: src2/target2.c
    gcc -o build/target2 src2/target2.c

all: target1 target2

clean:
    rm -rf build/*

编写完makefile后,可以在命令行中使用"make"命令执行makefile,例如:

代码语言:txt
复制
make all

这将编译所有目标文件。如果只想编译特定的目标文件,可以使用目标名称作为参数,例如:

代码语言:txt
复制
make target1

这将只编译"target1"目标文件。

请注意,上述示例中的路径和名称仅供参考,实际应根据项目的实际情况进行修改。此外,还可以根据需要添加其他编译选项和依赖项。

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

相关·内容

深入理解Android Build系统

如何将这些模块统一管理起来,如何能够在不同操作系统上进行编译如何编译时能够支持面向不同硬件设备,不同编译类型,且还要提供面向各个产商定制扩展,Android系统如何解决这些问题呢?...Make命令在执行时候,默认会在当前目录找到一个Makefile文件,然后根据Makefile文件指令来对代码进行编译。如gcc,Linux系统shell命令cp、rm等等。.../out/target/product//:包含了针对特定设备编译结果以及平台相关 C/C++ 库和二进制文件其中,是具体目标设备名称。...## 添加新模块 在源码树一个模块所有文件通常都位于一个文件。...Build 系统会扫描名称为“Android.mk”文件根据该文件内容编译出相应产物。

1.9K60

深入理解使用ndk-build编译NDK程序

有了这些脚本,开发者就不必再定义各种环境变量,只需要提供两个 Makefile 片段指明要编译哪些C/C++文件,生成哪个目标环境程序就好了。...Android.mk: 目的是用于向构建系统描述源文件和共享库,它位于 $PROJECT/ni/目录。...Application.mk: 目的是描述在你应用程序中所需要模块(即静态库或动态库),它也位于 $PROJECT/jni/ 目录。 下面我们分别来详细介绍一下它们。...此变量必须保留其值,因为系统在单一 GNU Make 执行环境(其中所有变量都是全局解析所有构建控制文件。 在描述每个模块之前,必须声明(重新声明)此变量。...APP_ABI >> 您可以使用 APP_ABI 选择编译不同 ABI 目标环境代码。 >``` APP_OPTION 可定义变量为 release 或 debug。

3.2K20
  • LinuxMakefile文件详解

    Makefile一个用于构建和管理项目的工具,特别适用于 C/C++ 项目。它定义了项目中各个文件之间依赖关系,指定了如何编译和链接这些文件。...以下是一个简单 Makefile 文件示例,以及对其中关键部分详细解释: 1....make 使用一个名为 Makefile 文件其中包含了一系列规则和指令,描述了文件之间依赖关系以及如何生成目标文件。以下是一个简单 Makefile 文件结构和基本要素: 11....文件描述了一个简单项目结构,其中文件位于 src 目录目标文件位于 obj 目录,可执行文件位于 bin 目录。...条件语句 Makefile 可以使用条件语句,根据不同条件执行不同指令。

    89910

    Makefile教程

    (1)make会在当前目录下找名字叫“Makefile”或“makefile文件; (2)如果找到,它会找文件一个目标文件(target),并把这个文件作为最终目标文件; (3)如果...在我们编程,如果一个工程已被编译过了,当我们修改了其中一个文件,比如file.cpp,那么根据我们依赖性,我们目标file.o会被重编译(也就是在这个依性关系后面所定义命令),于是file.o...自动推导功能和自动化变量,用一条语句实现同一个目录下多个源文件编译 #根据多个源文件目录添加多个,注意不同目录文件不能重名 ${DIR_OBJ}/%.o:${DIR_SRC0}/%.cpp...那么如何解决这个遗憾呢?其实可以让编译器自动推导源文件使用了哪些头文件,这样我们就可以将源文件使用文件添加到目标obj文件依赖项,读者可参考网上资料,自行给出实现。...如 %.o:%c $(CC) $< -o $@ 表示所有的目标文件及其所有依赖文件,然后编译所有目标文件一个依赖文件生成目标文件

    4K53

    如何使用Makefile在Ubuntu上自动执行重复任务

    因此,我们应该将Makefile放在我们将要执行任务目录,或者调用我们将要编写脚本最有意义地方。 在Makefile,我们遵循特定格式。...然后它将在目录查找“.png”替换为“.jpg”目标文件。然后它将执行后面的命令。 后缀规则使用了一些我们尚未介绍变量。这些帮助根据当前流程哪个部分替换不同信息: $?...第二行引用此变量执行简单名称转换,将JPEG变量以.jpeg结尾名称转换为以.jpg结尾名称。...此列表仅包含.png文件名,因为我们进行了另一个名称转换。现在,此目录每个.jpg或.jpeg文件都用于编译我们要创建.png文件列表。...虽然在某些情况下编写一个简单脚本可能更容易,但Makefile是在流程之间建立结构化层次关系简单方法。学习如何利用这个工具可以帮助简化重复性任务。

    2.3K00

    探索Linux内核:Kconfig秘密

    为了探索Linux内核是如何编译,本文将深入研究Kconfig/kBuild内部进程,解释.config文件和vmlinux/bzImage文件如何生成介绍一个用于依赖性跟踪智能技巧。...KBuild指的是不同类型makefileMakefile位于源根顶部makefile。 .config是内核配置文件。...顶部makefile包含archmakefile,读取.config文件,进入子目录,调用制作,使定义例程帮助下实现每个组件makefile。...编译文件命令行也很重要,因为不同命令行可能导致不同对象文件。 当.C文件通过#include指令,您需要编写这样规则: main.o: defs.h recipe......这背后秘密是,Fixdep将解析depfile(.d文件),然后解析其中所有依赖文件,搜索所有config_string文本,将它们转换为相应空头文件,并将它们添加到目标的先决条件

    1.7K11

    cmake 简介2021-10-03

    ; 第三条命令用于执行Makefile文件编译程序,生成可执行文件; CMake执行就是这么简单,其难点在于如何编写CMakeLists.txt文件,下面结合例子简单介绍CMakeLists.txt...build,与in-source build相对,即将编译输出文件与源文件放到不同目录; 三、 基本结构 1,依赖CMakeLists.txt文件,项目主目标一个,主目录可指定包含目录...build,与in-source build相对,即将编译输出文件与源文件放到不同目录; 三、 基本结构 1,依赖CMakeLists.txt文件,项目主目标一个,主目录可指定包含目录...在工程查找使用其他程序库方法 在开发软件时候我们会用到一些函数库,这些函数库在不同系统安装位置可能不同,编译时候需要首先找到这些软件包文件以及链接库所在目录以便生成编译选项...在工程查找使用其他程序库方法 在开发软件时候我们会用到一些函数库,这些函数库在不同系统安装位置可能不同,编译时候需要首先找到这些软件包文件以及链接库所在目录以便生成编译选项

    34320

    【Linux】《how linux work》第十五章 开发工具

    C程序遵循传统开发过程:您编写程序,编译它们,然后运行它们。 也就是说,当您编写一个C程序希望运行它时,您必须将您编写源代码编译成计算机理解二进制低级形式。...有时候在不同目录中有几个同名文件,不清楚哪一个是正确。...双引号意味着头文件不在系统包含目录,但编译器应该在其包含路径搜索。 这通常意味着头文件与源文件位于一个目录。 如果你在双引号遇到问题,你可能在尝试编译不完整源代码。...这是一个快速缓存,其中包含在缓存配置文件/etc/ld.so.conf列出目录中找到文件名称。...C程序;如果你程序需要一个库或特殊包含目录,你应该编写一个Makefile

    9610

    Makefile学习1

    linux下编写程序,因为早期没有成熟IDE,一般都是使用不同命令进行编译:将源文件分别使用编译器、汇编器、链接器编译成可执行文件,然后手动运行。...、makefile、GNUmakefile,make会在当前目录下自动寻找找三个文件名 如果同时存在执行makefile;如果没有找到的话,make就无法继续编译程序,产生一个错误退出;如果名称自定的话...多目标 一个规则也可以有多个目标,多个目标具有相同生成命令和依赖文件。...递归执行 在实际工程项目中,各个源文件通常存放在各个不同目录,make在编译工程项目时,会依次遍历各个不同目录编译每个子目录文件。...,解析各个子目录Makefile运行,遍历完所有的子目录 make依次遍历到各个子目录下解析新Makefile时,项目顶层目录Makefile定义一些变量,如何传递到子目录Makefile

    36610

    qmake:变量手册

    49、QMAKE 指定 qmake 程序本身名称放置在生成 Makefile 。...只需要指定编译器可执行文件文件名,只要它在处理 Makefile位于 PATH 变量包含路径上即可。 55、QMAKE_CFLAGS 指定用于构建项目的 C 编译器标志。...使用此变量指定每个子目录都必须包含其自己项目文件。 建议每个子目录项目文件与子目录本身具有相同基本名称,因为这样可以省略文件名。...例如,定义两个子目录,它们都位于与 SUBDIRS 值不同目录,并且其中一个目录必须在另一个目录之前构建: SUBDIRS += my_executable my_library my_executable.subdir...子目录是使用 SUBDIRS 变量指定。 aux:为不构建任何内容项目创建一个 Makefile。 如果不需要调用编译器来创建目标,请使用此选项。例如,项目是用解释性语言编写

    3.8K20

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

    虽然命令行脚本也能帮助编译链接,但是它能力还太弱,它每次都会将所有文件重新编译,例如有几百个源文件,我仅仅只修改了其中一个文件,那么重新编译时,这几百个源文件也都会重新编译,这样每次编译一下都会耗费大量时间...,删除所有.o文件和可执行文件 clean: rm *.o main.exe 在make工具,它能够自动完成对.c文件编译生成对应.o文件。...上面例子目标在定义上存在一些问题,假如源码目录下真的存在一个名为clean文件,则会与当前目标冲突。...简单说,以前我们编写C语言编译脚本是不能跨平台编译,例如上面示例编写 Makefile ,它只能在GCC环境下编译,通常是Linux系统上,而在Windows下Visual Studio里面就没法用...VERSION 2.8) # 获取当前目录文件路径列表,保存到变量SRC_LIST aux_source_directory (.

    3K30

    make与makefile

    首先:先向大家说明,make是一个命令行命令,而makefile则是一个文件名称,make这个命令是用来执行makefile这个文件 makefile: 1.mekefile编译过程: Makefile...文件命令有一定规范,一旦该文件编写好以后在Linux命令行执行一条make命令即可自动编译整个工程。...如果目标文件更新时间晚于依赖文件更新时间,则说明依赖文件没有改动,目标文件不需要重新编译。否则会进行重新编译更新目标文件。 2、默认情况下Makefile一个目标为终极目标。...假如我们在系统一个目录下,创建一份名为hello.cc文件,那么我们就在同一个目录下创建一个依赖对象为hello.ccmakefile即可,当我们进入目录后,在命令行输入make,系统就会在这一目录下查找是否存在...makefile文件,找到后,依照其中指令进行运行,然后在这一目录下会新增一个高亮文件,运行这个文件即可。

    7710

    makefile从入门到放弃——博主吐血整理笔记

    一个工程文件不计其数,并且按类型、功能、模块分别放在若干个目录makefile定义了一系列规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂功能操作...文件: $ make #默认生成第一个文件 $ make '目标名'#选择性编译 当工程文件名和makefile目标重名时,就会有伪目标。...其与C/C++所不同是,你可以在Makefile改变其值。在makefile,变量可以使用在“目标”,“依赖目标”, “命令”或是Makefile其它部分。...makefileVPATH VPATH:虚路径 在一些大工程,有大量文件,我们通常做法是把许多文件分类,并且存放在不同目录下。...makefile文件特殊变量VPATH就是完成这么一个功能,如果没有指明这个变量,make只会在当前目录中去寻找依赖文件目标文件

    1.6K20

    Makefile基础教程:从零开始学习

    一个Makefile通常包含多个规则,每个规则都包含一个目标和一组依赖关系,用于描述如何生成目标文件Makefile可以大大简化构建过程,使得开发人员可以更迅速地测试和部署他们代码。...例如,当我们需要添加新依赖关系时,我们只需要在Makefile添加相应规则即可,而不需要手动编译每个目标文件。 此外,Makefile具有自动分析依赖关系功能,可以根据依赖关系自动构建程序。...Makefile基本语法 Makefile基本语法由目标、依赖关系和命令三部分组成,其中目标和依赖关系用于描述构建规则,命令用于执行构建操作。...以下是一些可能有用想法: 可以使用自定义变量,例如指定编译器、编译选项、源代码目录等。 可以使用条件语句,例如根据不同操作系统或不同编译选项来决定是否编译某些代码。...可以使用循环,例如在多个目录构建程序或者编译多个源文件。 这些方法可以帮助我们更好地管理我们代码,提高Makefile文件灵活性和适应性。

    38420

    CMake入门实战——单个源文件

    这些 Make 工具遵循着不同规范和标准,所执行 Makefile 格式也千差万别。这样就带来了一个严峻问题:如果软件想跨平台,必须要保证能够在不同平台编译。...CMake就是针对上面问题所设计工具:它首先允许开发者编写一种平台无关 CMakeList.txt 文件来定制整个编译流程,然后再根据目标用户平台进一步生成所需本地化 Makefile 和工程文件...在 linux 平台下使用 CMake 生成 Makefile 编译流程如下: 编写 CMake 配置文件 CMakeLists.txt 。...执行命令 cmake PATH 或者 ccmake PATH 生成 Makefile其中, PATH 是 CMakeLists.txt 所在目录。 使用 make 命令进行编译。...add_executable: 将名为 main.cc 文件编译一个名称为 Demo 可执行文件编译项目 之后,在当前目录执行 cmake .

    54220

    Linux:基础IO(三.软硬链接、动态库和静态库、动精态库制作和加载)

    它是一个特殊类型文件其中包含指向另一个文件目录路径。软链接与硬链接不同,软链接与原始文件之间是独立,它们有不同inode编号。...软链接(符号链接)是一个独立文件其中存储着指向目标文件路径信息 当系统访问软链接文件时,实际上会根据软链接文件存储路径信息找到目标文件。...方便我们快速找到 通过在当前路径下创建一个软链接,可以方便地访问位于其他较深路径文件。这样可以简化文件路径输入,提高操作效率,同时也可以避免频繁切换目录。...Makefile 文件读取其中规则和指令。...因此,即使可执行程序还没有被加载到内存,它仍然具有地址概念,并且已经被划分为不同区域。

    16310

    Autoconf编译配置

    ,是生成configure文件,configure是一个脚本,它能设置源程序来适应各种不同操作系统平台,并且根据不同系统来产生合适Makefile,从而可以使你源代码能在不同操作系统平台上被编译出来...,编写一个或多个【Makefile.am】(Makefile.am数目和存放位置和源码目录结构相关),Makefile.am主要写就是编译目标及其源码组成。...3)**原则3:**Makefile.am中指明当前目录如何编译 编译安装 编译和安装规则是绑定在一起,通过同一条语句同时指定了编译和安装处理方式 具体格式为:安装目录_编译类型=编译目标...自定义目录: 在根目录Makefile.am添加如下内容: configdir=${prefix}/config => 定义一个自定义目录名称config,注意dir后缀是固定 config_DATA...autoconf如何找到新宏 执行autoheader,会生成一个config.h.in文件 执行autoconf生成configure 编写Makefile.am文件:Automake

    1.2K50

    换个角度说Makefile

    作为一个轻度使用者,应读者要求,斗胆介绍一下makefile,不过与普通makfile教程不同是,本文准备从另外一个角度来介绍。如有不妥之处,欢迎指出。...然后再去学习如何编写makefile。 实际上它主要做事情也很清楚,那就是编译和链接。这个在《helo程序是如何编程可执行文件已经有所介绍,还不了解朋友可以简单了解一下。...文件中有三个目标,分别是main.o,main和clean,其中clean是一个目标。...安装程序 其中最关键事情就是编译链接,即想办法把.c变成.o(可重定位目标文件);.o+.so(动态库)+.a(静态库)变成可执行文件。...对于一个复杂项目而言,makefile还有很多东西可介绍,例如如何设置变量,如何交叉编译如何多个目录编译如何自动推导,如何分支选择等等。这些都是后话了。

    75220
    领券