Makefile第三讲:终端传值给Makefile、Makefile传值给C++代码
摘要 终端传值给Makefile,咋传?只需在终端输入以下命令,那么就可以在Makefile文件中放心大担的使用$(abcde)这个变量了,它的值为BBB
fun.h
#include <iostream>
class Test {
public:
void static display(const char *str);
};
fun.cpp
#include "fun.h"
void Test::display(const char *str) {
std::cout <<str;
}
main.cpp
#include "fun.h"
int main() {
#if defined AAA
Test::display("AAA\n");
#elif defined BBB
Test::display("BBB\n");
#else
Test::display("CCC\n");
#endif
return 0;
}
makefile
OBJS = main.o fun.o
test: $(OBJS)
g++ $(OBJS) -o test
main.o: main.cpp
g++ -c main.cpp -D$(abcde) -o main.o
fun.o: fun.cpp
g++ -c fun.cpp -o fun.o
install:
cp test ~/test
clean:
rm *.o test
这是一个多文件时编译makefile的例子,可以看到fun.h始终没出现在代码里边,不用疑惑,fun.cpp已经include进来了。
一、终端传值给Makefile,咋传?只需在终端输入以下命令,那么就可以在Makefile文件中放心大担的使用$(abcde)这个变量了,它的值为BBB
$make abcde=BBB
二、Makefile文件传变量给C++代码,其实这是属于g++的范畴,和makefile无关,只需在g++上加参数-D即可,如上例的g++ -c main.cpp -D$(abcde) -o main.o,终端通过命令make abcde=BBB传变量给Makefile,Makefile又把该变量传给g++,g++在编译时定义该变量,于是main.cpp就可以使用到这个变量(应该是宏`#define BBB 1),如果只是传了一个变量名而不赋值,它的值就是1,如果想赋值,应该 这样:
$make abcde=BBB=3
那么g++ -c main.cpp -D$(abcde) -o main.o就会变成:g++ -c main.cpp -DBBB=3 -o main.o,在C++代码中便有:#define BBB 3
复制我例子中的源码,然后在命令行执行:make abcde=AAA、make abcde=BBB并运行编译出的程序看看有何不同。
Makefile第三讲:终端传值给Makefile、Makefile传值给C++代码的更多相关文章
- 【转载】Linux下makefile详解--跟我一起写 Makefile
概述 —— 什么是makefile?或许很多Winodws的程序员都不知道这个东西,因为那些Windows的IDE都为你做了这个工作,但我觉得要作一个好的和professional的程序员,makef ...
- 【 MAKEFILE 编程基础之三】详解 MAKEFILE 变量的定义规则使用!
本站文章均为 李华明Himi 原创,转载务必在明显处注明: 转载自[黑米GameDev街区] 原文链接: http://www.himigame.com/gcc-makefile/770.html ...
- Makefile之写demo时的通用Makefile写法
Makefile之写demo时的通用Makefile写法[日期:2013-05-22] 来源:CSDN 作者:gqb666 [字体:大 中 小] 前面的一篇文章Makefile之大型工程项目子目录M ...
- 属性传值,协议传值,block传值,单例传值四种界面传值方式
一.属性传值 对于属性传值而言,相对于其它的三种 方法来说,是最基础,最简单的一种 方法,但,属性传值 有很大的局限性,因为是适用于第一个界面向第二个界面传 值,第二个向第三个界面传值等等.N界面向N ...
- 32位汇编第三讲,RadAsm,IDE的配置和使用,以及汇编代码注入方式
32位汇编第三讲,RadAsm,IDE的配置和使用,以及汇编代码注入方式 一丶RadAsm的配置和使用 用了怎么长时间的命令行方式,我们发现了几个问题 1.没有代码提醒功能 2.编写代码很慢,记不住各 ...
- iOS-跨界面传值和跨应用传值
跨界面传值 从一个界面将一个结果值传到另一个界面,这个是我们在开发过程中非常常见的一个问题.传值本身并不是一个太复杂的问题,在此主要简述一下常用的传值方法. 我们传值常用的方法主要有四种: 1.属性传 ...
- React创建组件的方法,组件的props属性、state属性的用法和特点,父子组件传值,兄弟组件传值
创建组件的方法,组件的props属性.state属性的用法和特点,父子组件传值,兄弟组件传值 1.react组件 1.1.创建组件的方法 1.1.1.函数组件 定义一个组件最简单的方式是使用JavaS ...
- koa 基础(四)get 传值 以及获取 get 传值
1.get 传值 以及获取 get 传值 app.js /** * get 传值 以及获取 get 传值 */ // 引入模块 const Koa = require('koa'); const ro ...
- vue传值(父子传值,非父子传值)
vue组件传值,分为父子传值和非父子传值,父子传值又分为父传子和子传父. 组件之间的传值,实现了数据的联动,是从操作Dom到操作数据一个跳转性的突破,在学习vue双向绑定原理之后, 这种观念就应该继续 ...
随机推荐
- 怎么安装MySQL,安装MySQL遇到的一些问题!!!!!!
简介: 对于初学,我们在安装MySQL时,会出现各种各样的报错,这让我们非常的头痛.那么我来分享一下我在安装的过程中遇到的一些问题吧! 我们在安装MySQL之前,先安装好dotNetFx40_Clie ...
- nvmw install 失败. 需修改"Msxml2.XMLHTTP"为"Msxml2.ServerXMLHTTP"
准备在windows下学习nodejs. 下载了nvmw . 但没法安装node的任何版本. 都是报错如下: C:\Users\WXG>nvmw install v0.12.0 x86 Star ...
- 常用数据结构[OpenCV 笔记12]
Point 二维坐标系下的整数点, 定义如下 typedef Point_<int> Point2i; typedef Point2i Point; typedef Point_<f ...
- The Wonderful Wizard of Oz-绿野仙踪-(音频+文本)-英文版本
Audio: http://www.booksshouldbefree.com/book/the-wonderful-wizard-of-oz Books: http://www.gutenberg. ...
- JQuery 分页实现
JQuery分页实现 css: .liList0 { padding-left:5px;}.liList0 li { width:160px; float:left; display:inline ...
- ubuntu 下的 ftp (gftp)
功能和 windows 下的 ftp 一样 gftp安装方法apt-get install gftp启动方法:gfpt
- 用C#实现MD5算法
/// <summary> /// 一个实现MD5散列字符串的类 /// </summary> public sealed class MD5Hash ...
- jquery 中fadeIn,fadeOut动画
我们在做首页banner图片播放的时候会使用fadeIn,fadeOut动画,这里需要注意的是: fadeIn作用相当于:display:list-item;opcity逐渐变为1 fadeOut作用 ...
- window.onresize 多次触发的解决方法
用了window.onresize但是发现每次 onresize 后页面中状态总是不对,下面与大家分享下onresize 事件多次触发的解决方法. 之前做一个扩展,需要在改变窗口大小的时候保证页面显示 ...
- GitHub使用教程for Eclipse
1.下载egit插件http://www.eclipse.org/egit/ http://www.eclipse.org/egit/download/ Installing the Latest R ...