摘要 终端传值给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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!