首页
学习
活动
专区
工具
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等流行的一些云计算品牌商。如需了解腾讯云相关产品和产品介绍,请参考腾讯云官方网站。

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

相关·内容

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.4K20

qtqmake详解

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

2.4K40

CMake使用教程和原理

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

10.6K296

使用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.2K30

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.3K30

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 在所有的模式下安装

92310

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

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

2.8K30

cmake 简介2021-10-03

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

28520

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.8K20

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.3K21

cmake学习

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

1.9K90

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 但是,如此生成的话会产生很多中间文件,从而导致了当前文件夹文件过多,再次编辑文件时候会很难找到确切文件状况,这就是污染项目结构

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.6K70

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 文件夹分别盛放 头文件

1K20

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.8K10

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.5K10

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、双后缀规则、定义命令包等,这些需要我们在实际使用过程中去熟悉掌握。

3.9K53

深入浅出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.2K30

Linux CMake 快速使用(一)

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

1.6K60

使用Cmake生成跨平台项目编译解决方案

这些 Make 工具遵循着不同规范和标准,所执行 Makefile 格式也千差万别。这样就带来了一个严峻问题:如果软件想跨平台,必须要保证能够在不同平台编译。...,因此新建一个文件夹,到时候需要clean时候,直接删除build即可)。     ...那么一个一个文件添加太过于麻烦了,因此cmake使用aux_source_directory函数来添加目录到工程。     ...link_libraries("protobuf.so")     链接目标文件文件使用target_link_libraries函数,这里目标文件是指通过add_executable()和add_library...参数TARGETS后面跟就是我们通过ADD_EXECUTABLE或者ADD_LIBRARY定义目标文件,可能是可执行二进制、动态库、静态库。

5.2K20
领券