`
daojin
  • 浏览: 690191 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

自动化Build的方法如下所示

阅读更多
 
#本文件自动进行build。

##########修改如下内容进行自定义。#######
PROGRAM   := hello.exe
SRCDIRS   :=.
SRCEXTS   :=.cpp
#########################################

SOURCES := $(foreach d,$(SRCDIRS),$(wildcard $(addprefix $(d)/*,$(SRCEXTS))))

OBJS    := $(foreach x,$(SRCEXTS), \
      $(patsubst %$(x),%.o,$(filter %$(x),$(SOURCES))))

DEPS    = $(patsubst %.o,%.d,$(OBJS))

.PHONY : all obj
all : $(PROGRAM)

$(PROGRAM) : $(OBJS)
	g++ -o $(PROGRAM) $(OBJS)

objs : $(OBJS)

%.d: %.cpp
	g++ -MM -MD  $<

-include $(DEPS)

 

 关于%和*的不同:下面这段话仔细品味:  
一个是变量(所有的%代表的是相同的字符串,以第一次匹配上为标准),一个是通配。  
一般我们可以使用“$(wildcard *.c)”来获取工作目录下的所有的.c文件列表。复杂一些用法;可以使用“$(patsubst %.c,%.o,$(wildcard *.c))”,首先使用“wildcard”函数获取工作目录下的.c文件列表;之后将列表中所有文件名的后缀.c替换为.o。这样我们就可以得到在当前目录可生成的.o文件列表。因此在一个目录下可以使用如下内容的Makefile来将工作目录下的所有的.c文件进行编译并最后连接成为一个可执行文件:  
#sample Makefile  
objects := $(patsubst %.c,%.o,$(wildcard *.c))  
foo : $(objects)  
cc -o foo $(objects)  
这里我们使用了make的隐含规则来编译.c的源文件。对变量的赋值也用到了一个特殊的符号(:=)。关于变量定义可参考6.2 两种变量定义一节。函数“patsubst”可参考8.2 文本处理函数一节  
#关于.d文件。有这两段话,帮助理解为何生成.d文件  
---makefile的包含  
“include”指示符告诉make暂停读取当前的Makefile,  
而转去读取“include”指定的一个或者多个文件,  
完成以后再继续当前Makefile的读取。  
---makefile的更新(包括自我更新)  
make在读入所有makefile文件之后,  
首先将所读取的每个makefile作为一个目标,  
寻找更新它们的规则。  
如果存在一个更新某一个makefile文件明确规则或者隐含规则,  
就去更新对应的makefile文件。  

0
0
分享到:
评论

相关推荐

    ios自动化批量打包

    示例脚本如下所示: ```sh # 替换启动页资源 cp /Users/a58/Desktop/replace/Default-568h@2x.png /Users/a58/Desktop/BuildSite副本/BuildSite/Images.xcassets/LaunchImage.launchimage/Default-568h@2x.png # 更...

    使用hudson 搭建daily build 系统

    假设项目结构如下所示: ``` / |- build.xml |- +postlogic | |- build.xml |- +mysqllogic | |- build.xml |- +front_post | |- build.xml ``` 这里,`postlogic`、`mysqllogic` 和 `front_post` 分别代表项目的...

    ant build.xml 详解

    一个简单的`build.xml`文件可能如下所示: ```xml &lt;property name="build.dir" value="build"/&gt; ${build.dir}"/&gt; ${build.dir}/classes"/&gt; ${src.dir}" destdir="${build.dir}/classes"/&gt; ...

    项目build.xml文件

    例如,一个简单的编译目标可能如下所示: ```xml ``` 这个目标会编译`src`目录下的Java源代码,并将结果输出到`bin`目录。 3. **task**:是Ant构建过程中的最小执行单元,比如`javac`用于编译Java源代码,...

    Jenkins自动部署pipeline脚本参考 Jenkins自动化部署信息

    例如,一个简单的`Jenkinsfile`可能如下所示: ```groovy pipeline { agent any stages { stage('Build') { steps { sh 'mvn clean install' } } stage('Test') { steps { sh 'mvn test' } } stage('...

    前端开源库-cake-build

    例如,一个简单的Cake脚本可能如下所示: ```csharp Task("Clean") .Does(() =&gt; { CleanDirectories("./build/output"); }); Task("Build") .IsDependentOn("Clean") .Does(() =&gt; { MSBuild("./src/MyProject...

    BuildConfig.swift,类似android的macos/ios自动生成配置文件.zip

    然后`BuildConfig.swift` 会自动生成相应的Swift结构体,如下所示: ```swift struct BuildConfig { static let appVersion = "1.2.3" static let debugMode = true static let apiEndpoint = URL(string: ...

    swift-iOS自动打包

    例如,一个简单的打包 lane 可能如下所示: ```ruby lane :auto_build do gym(scheme: "YourScheme", export_method: "app-store") # 使用gym进行打包 deliver(force: true) # 使用deliver上传到App Store ...

    vue-cli3项目打包后自动化部署到服务器的方法

    为了提高用户体验,你可以添加一些控制台输出的美化,比如引入 `ora` 和 `chalk` 插件,如下所示: ```javascript // 引入必要的库 var client = require('scp2'); const ora = require('ora'); const chalk = ...

    用npm-run实现自动化任务的方法示例

    【npm-run实现自动化任务的方法】 在JavaScript开发过程中,自动化任务的执行可以显著提高工作效率,减少重复劳动。`npm-run`是npm(Node Package Manager)的一部分,它允许开发者在`package.json`文件中定义一...

    MSbuild使用MSBuild实现完整daily_build流程

    项目结构如下所示: ``` Hello/ ├── build/ │ ├── SharedComponents.proj │ ├── HelloService.proj │ └── HelloSite.proj ├── private/ │ └── HelloSolution/ │ ├── SharedComponents/ ...

    grinder.dart:Dart工作流程,自动化

    要创建一个简单的grinder脚本,请运行: pub run grinder:init 通常,grinder脚本如下所示: import 'package:grinder/grinder.dart' ;main (args) =&gt; grind (args);@DefaultTask ( 'Build the project.' )build ()...

    popper:容器本机任务自动化引擎

    工作流程文件如下所示: steps : - id : dev-init uses : docker://rikorose/gcc-cmake:gcc-9 runs : [sh, -uexc] args : - | rm -rf build/ cmake -DCMAKE_BUILD_TYPE=Release -S . -B build - id : build ...

    ipmi windows可视化管理工具

    "IPMIView"是其中一种适用于Windows的IPMI管理软件,如文件名所示的IPMIView_2.14.0_build.180213_Windows.exe即为该工具的安装程序。它提供了一个直观的图形界面,用户可以通过这个工具轻松查看和控制远程服务器的...

    build-tools-examples:使用构建工具解决问题

    "build-tools-examples"这个项目,正如其标题所示,是一个专门用来展示如何利用构建工具来解决各种问题的实例集合。在这个项目中,我们主要会探讨JavaScript相关的构建工具及其应用。 1. **什么是构建工具?** ...

    ant修改参数重新编译的 Proguard 4.7

    2. **配置Proguard任务**:在build.xml中,添加`&lt;taskdef&gt;`标签来定义Proguard任务,如下所示: ```xml ``` 3. **设置Proguard配置文件**:创建一个名为proguard.cfg的配置文件,指定混淆规则、保留的类和方法...

    利用GMS和MapGIS建立地层模型

    将做好的shape文件导入GMS(从打开中选择,具体不再赘述),导入结果如图所示: 3.1.1 绘制边界轮廓: 这里有两种方法,一、新建一个Coverage,点击左侧GISLayer,选中上排菜单栏的GIS—Shapes-&gt;Feature Objects,...

    LabVIEW中DLL文件的创建及调用方法

    2. **创建项目管理器**:接着,在LabVIEW环境中创建一个项目管理器,并通过项目浏览器窗口执行相应的操作,如图3所示,以此为基础来创建DLL文件。 3. **设置DLL属性**:在创建了DLL之后,需要对其进行一些基本设置...

    oracle 数据库 自动创建表

    Python代码可能会如下所示: ```python import pandas as pd import cx_Oracle # 解析.doc文档 tables_df = pd.read_doc('design_document.doc') # 连接Oracle数据库 connection = cx_Oracle.connect('username',...

    Gradle生成md5代码

    在`build.gradle`文件中,你可以通过`dependencies`块引入Apache Commons Codec库,如下所示: ```groovy dependencies { implementation 'commons-codec:commons-codec:1.15' // 使用最新版本 } ``` 这将确保...

Global site tag (gtag.js) - Google Analytics