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

[MAKEFILE]:如何将不同源文件夹中的cpp源文件复制到一个目标文件夹中,并使用这些cpp文件通过MAKE进行构建

[MAKEFILE] 是一个用于构建和管理软件项目的工具。它使用一个名为 Makefile 的文件来定义构建过程中的规则和依赖关系。

要将不同源文件夹中的 cpp 源文件复制到一个目标文件夹中,并使用这些 cpp 文件通过 MAKE 进行构建,可以按照以下步骤进行操作:

  1. 创建一个名为 Makefile 的文本文件,并将其放置在项目的根目录中。
  2. 在 Makefile 中定义目标文件夹的路径和源文件夹的路径。假设目标文件夹为 "target",源文件夹为 "src1" 和 "src2",可以使用以下代码进行定义:
代码语言:txt
复制
TARGET_DIR := target
SRC_DIRS := src1 src2
  1. 定义一个变量来获取所有的 cpp 源文件。可以使用通配符来获取所有的 cpp 文件,如下所示:
代码语言:txt
复制
CPP_FILES := $(wildcard $(addsuffix /*.cpp,$(SRC_DIRS)))
  1. 定义一个目标规则来复制 cpp 源文件到目标文件夹。使用命令 cp 来复制文件,如下所示:
代码语言:txt
复制
$(TARGET_DIR)/%.cpp: %.cpp
    cp $< $@
  1. 定义一个目标规则来构建目标文件。使用命令 make 来进行构建,如下所示:
代码语言:txt
复制
build: $(addprefix $(TARGET_DIR)/,$(notdir $(CPP_FILES)))
    make -C $(TARGET_DIR)
  1. 定义一个伪目标规则来清理生成的文件。使用命令 rm 来删除文件,如下所示:
代码语言:txt
复制
clean:
    rm -rf $(TARGET_DIR)
  1. 最后,在 Makefile 的末尾添加以下内容,以便在命令行中执行相应的规则:
代码语言:txt
复制
.PHONY: build clean

all: build

完成以上步骤后,可以在命令行中执行以下命令来进行构建:

代码语言:txt
复制
make

这将会将不同源文件夹中的 cpp 源文件复制到目标文件夹中,并使用这些 cpp 文件通过 MAKE 进行构建。

请注意,以上答案中没有提及腾讯云相关产品和产品介绍链接地址,因为要求答案中不能提及亚马逊AWS、Azure、阿里云、华为云、天翼云、GoDaddy、Namecheap、Google等流行的一些云计算品牌商。如需了解腾讯云相关产品和产品介绍,请参考腾讯云官方网站。

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

相关·内容

Makefile && CMake 简单入门

,特别是源文件很多的情况,所以我们可以用匹配符 % 来匹配 .o 以及 .cpp 文件,然后又引入 @、^、 ​ 此外还引入了伪目标 .PHONY,它可以标记一个命令进行执行,该命令不会因为文件路径中有同名的文件而被干扰...它就会执行 cmake 的规则后就会生成 makefile 文件,接着我们执行 make 指令就能创建以下这些文件: ​ 这样子其实直接放在工作目录中是很凌乱的,所以我们不推荐这样子做!...因为要这些文件要删除的时候要手动删,如果文件很多的话,看起来是非常吃力的!所以我们一般推荐这么做: 在当前目录中创建一个文件夹 build。...这样,对于每个源文件,该规则都会生成对应的目标文件,并将其放到指定的目录中。 ​ 因此,第二个 Makefile 的规则更加准确和合理,可以正确地根据每个源文件生成对应的目标文件。...而第一个 Makefile 在处理多个源文件时存在问题,只会使用第一个源文件生成所有目标文件,这是不正确的。 ​ 所以,第二个 Makefile 是正确的形式,建议使用该形式来生成目标文件。

7610

g++,CMake和Makefile了解一下

2.1 Makefile介绍 Makefile描述了整个工程的编译、链接等规则,它定义了一系列规则来指定哪些文件需要编译以及如何编译、需要创建哪些库文件以及如何创建这些库文件...接下来我通过一个实例来说明如何编写Makefile。...3.编写目标文件2:依赖文件2 这一步的依赖文件2实际就是第二步的目标文件1,在第二步我们通过DisplayImage.cpp得到了DisplayImage.o,现在我们需要通过DisplayImage.o...CMake是一个跨平台的编译(Build)工具,可以用简单的语句来描述所有平台的编译过程,其是在make基础上发展而来的,早期的make需要程序员写Makefile文件,进行编译,而现在CMake能够通过对...3.2 CMake编译流程 成功安装好CMake后我们再来说说如何在linux平台下使用CMake生成Makefile并编译的流程,如下: 1.编写CMake配置文件CMakeLists.txt,我们可以认为

1.7K20
  • qt中qmake的详解

    2.创建pro文件,添加各种源文件,还可以设定平台相关的不同源文件,设置各种规则,利用qmake命令生成工程。后面会介绍pro文件可以手工编写,也可以利用qmake命令智能的生成。...一般顺序是先创建.pro文件,然后由.pro文件生成Makefile文件,makefile文件保存了编译器和连接器的参数选项,还表述了所有源文件之间的关系(源代码文件需要的特定的包含文件,可执行文件要求包含的目标文件模...,以便通过对特定cpp文件的编译来产生特定的obj文件。...我看书上的都是编写好cpp文件后,分别执行命令: qmake -project、qmake、make,然后执行就可以了,但是要是我在一个文件夹下有多个cpp文件,qmake怎么识别?.../qt 实验2 本实验中并没有用到上面所讲的方式,而是直接使用了默认值,但是假设说该文件夹下有两个cpp文件,如下图 这时候再执行命令:qmake -project会怎么样呢?

    2.7K40

    CMake使用教程和原理

    一、什么是CMake CMake是一个主要用于CPP的构建工具。CMake语言是平台无关的中间编译工具。同一个CMake编译规则在不同系统平台构建出不同的可执行构建文件。...- CDash是一个Web应用程序,用于显示测试结果并执行连续的集成测试。...在项目的构建过程中都使用shell级别的环境变量。通常,项目具有指向根目录位置的PROJECT_ROOT环境变量。还有配置可选或外部程序包。要使构建正常进行,每次执行构建时都需要设置所有这些外部变量。...当这些文件有变化,都会从cmake的重新构建。 image.png depend.make和DependInfo.make:所有object的依赖关系。...:查找dir路径下的所有源文件,保存到variable变量中.

    13.7K297

    使用VisualGDB开发Keil MDK-ARM项目

    前言 本教程展示了如何使用VisualGDB使用Keil MDK-ARM编译器构建项目,使用VisualGDB智能感知包括CodeMap,并使用Visual Studio调试它。...这些选项不兼容gcc,并且会产生智能感知错误。 “-c”和“-o”等指定文件名的选项。它们是由Makefile自动添加的。 下表对示例uVision项目的选项进行了分类: ?...在此之前,打开Keil目标选项并注意链接器标志: ? 现在我们将指定特定于keil的标志。创建一个名为keil的文件。...要解决这个问题,首先通过uVision找到HAL文件夹: ? 该文件夹中的源文件实现了各种HAL功能: ? 在解决方案资源管理器中右键单击,选择Add->现有项并向项目添加HAL源文件。...您可以通过添加一个简单的函数来重现这个问题,该函数将产生警告和错误,并尝试构建您的文件: ? ? 为了支持“, line ”格式,下载BuildMessageRegexes。

    2.4K30

    Cmake的使用

    CMake可以说已经成为大部分C++开源项目标配 传统的C++文件不通系统对应不通的编译 比如 当添加一个文件的时候需要对不通操作系统中的工程进行修改 有了Cmake以后,只需要编写一个...…) add_subdirectory – 向当前工程添加存放源文件的子目录,并可以指定中间二进制和目标二进制存放的位置 # 添加src子目录,src中需有一个CMakeLists.txt add_subdirectory...CMakeLists.txt通过add_subdirectory添加子目录即可; 包含源文件的子文件夹未包含CMakeLists.txt文件,子目录编译规则体现在主目录的CMakeLists.txt中;...# 表示上级目录 ../ # 表示上级目录 两种构建方式 内部构建(in-source build):不推荐使用 内部构建会在同级目录下产生一大堆中间文件,这些中间文件并不是我们最终所需要的...build):推荐使用 将编译输出文件与源文件放到不同目录中 ## 外部构建 # 1.

    1.4K31

    【系列教程】 C++项目开发配置最佳实践(vscode远程开发配置、格式化、代码检查、cmake管理配置)

    ,一次只能分析一个文件,如何一次性分析整个项目的文件呢?...使用cmake生成makefile文件并编译一个分以下流程:在根目录及每个模块目录下编写CMakeLists.txt在根目录创建一个build文件夹进入build目录,执行cmake …/ 生成整个项目的...makefile执行make和make install进行编译和安装。...(lib ${lib})# target_link_libraries:将目标文件与库文件进行链接# 使用多线程需要引入pthread库,所以将pthread库链接到上一步创建的lib目标文件中target_link_libraries...ccache 的基本原理是通过将头文件高速缓存到源文件之中而改进了构建性能,因而通过减少每一步编译时添加头文件所需要的时间而提高了构建速度。

    3.4K30

    qmake介绍

    ,你只需要运行顶层文件件夹中的qmake来生成makefile,你可以运行你的平台构建构工具通过makefile来构建项目 使用第三方库 Thrid Party Libraries显示了如何使用简单的构建第三方库...的时候要搜索所有的子文件夹,并执行路径下的每一个pro文件,并且运行平台的 make工具在新创建的Makefile上,SUBDIRS变量用来包含一系列的子目录 常规配置属性 变量 CONFIG 指定了项目所需要的配置的选项和特征...app项目,目的是来运行自动化的测试,任何app可能都需要进行一些测试用例,我们通过在CONFIG便令中添加testcase来实现 对于一个testcae项目,qmake将会在生成的Makefile文件中插入一个...,比如,这对通过附加的指令来设置测试的输出文件或格式(比如: -o filename, 这些选项有 QTestLib来阐述) 构建一个库 lib模板告诉qmake来生成一个Makefile,此makefile...,这样做的目的是为了让两个名字不相互覆盖 让qmake构建项目文件的时候,它将会生成一个makefile的规则,这个规则允许项目构建所有的模式,可以通过如下的命令来调用 make all 在所有的模式下安装

    1K10

    cmake 简介2021-10-03

    文中通过一些例子介绍使用 CMake 处理多源文件目录的方法、查找并使用其他开发包的方法以及生成 debug 版和 release 版程序的方法。...后就可以得到 Makefile 并使用 make 进行编译,如下图所示。...在工程中查找并使用其他程序库的方法 在开发软件的时候我们会用到一些函数库,这些函数库在不同的系统中安装的位置可能不同,编译的时候需要首先找到这些软件包的头文件以及链接库所在的目录以便生成编译选项...后就可以得到 Makefile 并使用 make 进行编译,如下图所示。...在工程中查找并使用其他程序库的方法 在开发软件的时候我们会用到一些函数库,这些函数库在不同的系统中安装的位置可能不同,编译的时候需要首先找到这些软件包的头文件以及链接库所在的目录以便生成编译选项

    36420

    CMake基础

    得到最终的a.out: g++ hello.o main.o -o a.out 三、构建系统Makefile 文件越来越多时,一个个调用g++编译链接会变得很麻烦 于是,发明了 make 这个程序,你只需写出不同文件之间的依赖关系...,和生成各文件的规则 make a.out 敲下这个命令,就可以构建出 a.out 这个可执行文件了 和直接用一个脚本写出完整的构建过程相比,make 指明依赖关系的好处: 1.当更新了hello.cpp...的命令行调用 读取当前目录的 CMakeLists.txt,并在 build 文件夹下生成 build/Makefile: cmake -B build 让 make 读取 build/Makefile...,我们之后会讨论如何使用他人的库 windows中静态库是以.lib 为后缀的文件,动态库是以.dll 为后缀的文件 linux中静态库是以.a 为后缀的文件,动态库是以.so为后缀的文件 创建库以后,...other.cpp) # 添加要编译的源文件 以及可以通过下列指令(不推荐使用),把选项加到所有接下来的目标去: include_directories(/opt/cuda/include

    1.9K20

    cmake学习

    通过执行make命令,将Makefile转成对应的gcc/g++命令,从而生成可执行文件。 整个过程即为编译的过程。...单个cpp文件cmake思路 cpp文件,直接生成可执行文件。 add_executable()函数的第一个参数是要生成的可执行文件的名称,第二个参数是要编译的源文件的列表。...创建并链接一个静态库 cmake思路 过程: 根据源文件创建静态库,静态库链接头文件 生成可执行文件并链接静态库,静态库再链接头文件 # add_library()函数 从某些源文件创建一个库...用户就可以根据头文件中的接口情况,来知道库文件的功能 (具体怎么实现的他也不知道), 从而用户就可以使用库文件来完成自己的工作了(即执行main.c) 头文件的使用 编译静态库时,使用到头文件 编译其他目标文件时链接到静态库时...创建并链接一个共享库 cmake思路 过程:(与静态库类似) 根据源文件创建共享库库,共享库链接头文件 生成可执行文件并链接共享库,共享库再链接头文件 add_library(hello_library

    2K90

    Qt高级——QMake快速入门

    如,工程文件是hello.pro,Windows平台的目标名称是hello.exe,Unix平台的目标名称是hello。如果要使用不同的目标名称,需要在工程文件hello.pro中设置。...可以使用exists()函数检查一个文件是否存在。通过使用error()函数可以中止qmake执行过程。对main.cpp文件检查如下: !...除非在应用程序构建过程中使用console设置,否则看不到输出状态信息。通过将console增加到CONFIG变量可以在生成的MakeFile文件中生成相应的设置。...1、QMake创建应用程序 app模板会告诉qmake生成一个构建应用程序的MakeFile。使用app模板,应用的类型可以增加一个选项到CONFIG变量定义中。...make install 可以自定义依赖于目标平台的构建目标的名称。例如,一个库或插件可以在Windows平台使用不同于Unix平台的命名规范。

    1.5K21

    CMake编写总结

    make和CMake之间的关系是CMake 通过命令可以生成make执行的Makefile文件,所以说CMake 是make 的升级版的生成工具 CMake文档 点击此处到达CMake的在线文档页面。...#genarate a app add_executable(${TARGET_NAME} 源文件 头文件) 简单C++项目编写CMakeLists.txt 简单项目是指只有一个文件夹,并且所有项目文件都放在其中的项目...GLOB_RECURSE,因为他会遍历所有找到的文件夹以及他的子文件夹,容易造成把build目录扫描导致main函数重复定义的情况 完成后用CMake编译生成makefile,即可使用make命令进行项目的编译了...复杂(多文件夹)C++项目写CMakeLists.txt 复杂项目示例 一般有较多文件的项目都是使用多文件夹进行管理项目源文件的,使用多个不同级目录下保存源文件的管理方式使用CMake生成makefile...在当前文件夹下使用一下命令可以生成Makefile: cmake 但是,如此生成的话会产生很多中间文件,从而导致了当前文件夹的文件过多,再次编辑文件的时候会很难找到确切的文件的状况,这就是污染项目结构

    1.1K10

    QT-第一个程序 Hello QT , 以及QT creator介绍

    //根据工程文件生成makefile make //根据makefile进行编译,生成debug文件夹 接下来,进入debug...make //根据makefile进行编译,生成可执行文件 运行: ?...3.使用Qt creator编译 注意:构建项目时,如果出现以下问题,则可能环境变量未设置好,或者环境变量的qt路径前面有 “(” 或 “)” 字符,从而导致:Interrupt/Exception caught...QT creator介绍 构建(bulid) 对项目中所有文件进行编译,最终生成可执行程序 Debug版 用来进行调试的版本,程序中会包含调试信息,所以运行效率低 Release版 最终发布的版本,无调试信息....pro项目描述文件 其本质就是一个简化的Makefile,通过不同平台的qmake生成不同平台的Makefile,如下图所示: ? .pro项目描述文件介绍 基本构成如下图所示: ?

    1.7K70

    NDK 开发环境配置

    它可以根据不同平台、不同的编译器,并通过CMakeLists.txt文件中简单的语句来描述所有平台的编译过程,生成相应的Makefile文件或project文件。...编译好的文件,包括支持的各种硬件等信息,有点类似于build.gradle文件明确Gradle如何编译APP; cpp文件夹:存放C/C++代码文件,native-lib.cpp文件默认生成的; CMakeLists.txt...${log-lib}) 运行效果 通过查看native-lib.cpp方法,stringFromJNI目的是向Java层返回一个字符串。...APP流程: Gradle调用外部构建脚本CmakeLists.txt; CMake 按照构建脚本中的命令将 C++ 源文件 native-lib.cpp 编译到共享的对象库中,并命名为 libnative-lib.so...AS通过借助LLDB调试工具,可以非常方便地对C/C++本地代码进行调试。LLDB调试的步骤基本与调试Java层代码一致,只是断点标志在C/C++函数中。 调试如下所示: ?

    1.9K10

    linux学习 建立静态库,动态库,写简单的makefile

    /lib/ libadd.a add.o //对目标文件*.o进行归档,生成lib*.a, 把这个生成文件放在lib里 3)gcc -o main main.c -L(大些的爱偶,放库的路径)...../include(放头文件) 生成add.o目标文件 gcc -shared -o libadd.so add.o 生成libadd.so动态库 这个库的名是add 将这个库放在根文件夹的lib文件中.../include(放头文件) (注意这里写的库名,没有lib和.so) 动态库与静态库比較: 动态库仅仅在运行的时候才被链接使用 动态库能够被多个程序使用,所以也称共享库 静态库将会整合大程序中,程序运行是不用夹在静态库...,因此静态库会是程序臃肿难以升级,但比較easy部署 动态库便于升级,但不easy部署 使用makefile 三个文件 bin(可运行文件),include(头文件),src(放源文件) 目标项.../include //生成main.o 简洁版 建立简单的makefile 1)vim makefile 2)main.exe:main.cpp g++ ^ -o @ 3)make @为目标项,^

    4.6K10

    Android NDK 开发 | CMake 使用手册 - 初见篇

    初识 使用 Clion 创建的 c++ 项目,默认通过 CMake 进行构建管理。可以看出其中有两个文件和一个文件夹,main.cpp 是源码文件,CMakeLists.txt 是项目的配置文件。...当有了 Makefile 文件,可以使用如下命令来构建可执行文件: make 在命令行执行该文件,可以看到 main.cpp 中输出结果的逻辑被执行。 ---> ....如下测试代码结构如下,有 src 和 facer 两个文件夹,一共三个类,六个文件。下面来看一下如何对文件夹内的文件进行统一搜索。...aux_source_directory 可以搜索文件夹中的实现文件,并添加到后面的变量中,这里是 SRC_LIST 。...和 make 命令即可构建出 .so 文件,如下所示“” ---- 下面来看一下在项目中如何集成 .so 文件,现在回到测试项目,在其中的创建 includes 和 libs 文件夹分别盛放 头文件

    1.2K20

    深入浅出CMake(一):基础篇

    CMake 是一个跨平台的编译构建工具,用来自动化生成 Makefile 之类的构建文件的。 一般在 unix 类系统上开发,我们用 gcc 或者 g++ 编译源码。...但是如果工程量变大,情况就变得复杂了,我们就需要用 make 工具,并编写 Makefile 记录好源码与依赖之间的关系。...一个最简单的 CMake 例子 要构建一个 CMake 编译系统,首先需要在代码根目录创建一个 CMakeLists.txt 文件,这个文件是用来描述构建过程的,可以看做是一个高级版的 Makefile...这正式 hello.cpp 中的输出。 这是最简单的 cmake 编译例子,但实际工作中是不会有这么简单的,实际工作中会涉及到很多的源文件,还有很多的动态的库,静态的库。...链接库 link_libraries(hello test)cmake 通过 link_libraries() 命令指定了目标间的依赖关系,示例代码中 hello 是可执行文件,test 是库。

    1.3K30

    Makefile教程

    在我们编程中,如果一个工程已被编译过了,当我们修改了其中一个源文件,比如file.cpp,那么根据我们的依赖性,我们的目标file.o会被重编译(也就是在这个依性关系后面所定义的命令),于是file.o...若将all放在所有目标文件的前面,则使用make即可,无需指明make all,原因是make命令将Makefile中第一个出现的目标作为最终目标,若不放在最前面,则必须指明make all。...那么如何解决这个遗憾呢?其实可以让编译器自动推导源文件使用了哪些头文件,这样我们就可以将源文件使用的头文件添加到目标obj文件的依赖项中,读者可参考网上的资料,自行给出实现。...其中-C表示改变当前目录,make的命令选项可通过make -h查看。 如果想对子目录的进行make clean,该怎么做呢?...8.小结 实际上,Makefile中还有很多基础知识点和复杂的特性并未在文中赘述,比如各种函数的用法、嵌套执行make、双后缀规则、定义命令包等,这些需要我们在实际使用过程中去熟悉掌握。

    4.1K53

    Linux CMake 快速使用(一)

    缘起:之前给别人提供的SDK都是在Linux下使用Qt搭建的,但是最近有客户不使用Qt,而是需要在Linux下使用cmake进行进行文件组织。于是我就进行谷歌,现在将可用的程序记录下来。...平时直接使用IDE开发,所以对整个编译的过程了解的不深入,借此机会,在接下来的文章中可能会涉及到程序如何从文本文件到屏幕上的字节流输出。...二、改善文件结构 通过以上几个步骤,我们掌握了基本cmake命令使用、makefile文件编写等技能。但是生成的中间文件与源文件与makefile混在一起,这在实际应用中肯定是不行的。...在build文件夹中进行编译 过程: 进入build文件夹 cmake .. make 注意是 cmake .. 中间文件在build文件下 ? 可执行文件所在目录 ?...三、小结 之后会和大家分享创建共享库以及链接共享库的makefile文件 如何让每天虽重复却也有意义呢 ?

    1.7K60
    领券