首页
学习
活动
专区
工具
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”的文件,并根据该文件中内容编译出相应的产物。

2K60

深入理解使用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.3K20
  • Linux中Makefile文件详解

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

    1K10

    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 $@ 表示所有的目标文件及其所有依赖文件,然后编译所有目标文件的第一个依赖文件,并生成目标文件。

    4.1K53

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

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

    2.4K00

    cmake 简介2021-10-03

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

    36320

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

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

    11110

    qmake:变量手册

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

    3.9K20

    Makefile学习1

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

    39510

    程序员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 (.

    3.1K30

    make与makefile

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

    8610

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

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

    1.7K20

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

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

    21610

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

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

    40820

    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 .

    55220

    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

    【Linux必备工具】自动化构建工具makefile的使用详解

    它是一个工程文件的编译规则,它记录了原始码如何编译的详细信息、描述了整个工程的编译链接等规则。 Makefile 是 Linux 下用于管理文件依赖和编译顺序的一个重要工具。.../filename,其中 filename 是可执行文件的名称,就可以运行程序。...在 Makefile 中,空行被视为分隔符,用于区分不同的规则或目标。 当 Make 工具解析 Makefile 文件时,它会忽略空行,并将第一行之后的非空行视为第一个规则或目标。...变量:可以使用变量来存储命令选项、编译器名称等信息,然后在规则中引用这些变量。...3.3 make/Makefile具有依赖性的推导能力 越是接近目标文件的命令,就越是要写在前面。

    22310

    【Liunx篇】基础开发工具-自动化构建-makeMakefile

    中写入这段代码 其中第一行的mytest表示最终形成的可执行程序,它依赖的叫做test.c,即当前目录下的test.c文件。...三.make/makefile的具体语法 能够把可执行程序执行,那么也应能把可执行程序删除,我们再来一段演示: 在Makefile中添加以下内容,保存并退出 其中第4行.PHONY是Makefile.../mytest 清理掉这个项目-make clean 我们就完成了能够构建和能够清理的Makefile make会自顶向下扫描makefile中的文件,如果想指定形成,就需要make + 目标文件的名称...Makefile也不具有通用性 第二代,我们将最终形成的可执行程序称之为BIN 这个叫做Makefile中的变量,你可以给你形成的mytest定义一个变量名 SRC表示形成可执行程序依赖的源文件...,再把所有的.o链接形成可执行 表示把SRC里面的.c全部替换成.o形成OBJ 正常的代码编写 其中^表示的是上面依赖关系中,所有的依赖文件列表(OBJ)。

    9710
    领券