我如何创建一个动态的make取决于我给它的参数
How do I create a dynamic make that depends on what arguments I give it?
不幸的是,这是一个非常简单的问题,但我似乎找不到答案。我刚刚重新开始c++编程,我想用一些项目euler问题来重新训练我生锈的技能。我计划今晚快速完成前10个,但在我开始做makefile
之前遇到了一个问题(我知道有点尴尬)。
说到点子上。我创建了一个如下的目录结构:
✗ tree
.
├── bin
├── inc
├── Makefile
├── obj
└── src
└── 1.cpp
我的想法是,我会在src
中创建一堆单独的文件,并将它们编译为bin
,但我一直无法弄清楚如何做到这一点。(makefile不适合这个吗?我想这就足够了)。
我想我可以用这样的语法调用它:
make 1
从src/1.cpp
编译bin/1
和obj/1.o
。
到目前为止,我的尝试是这样的:
CC=gcc
CFLAGS=-Wall -g -std=c11
OBJDIR=obj
SRCDIR=src
BINDIR=bin
$(OBJDIR)/%.o: $(SRCDIR)/%.cpp
$(CC) -c -o $@ $< $(CFLAGS)
clean:
rm -f $(BINDIR)/* $(OBJDIR)/*
但是结果是:
✗ make 1
make: *** No rule to make target '1'. Stop.
我觉得我错过了一些明显的东西,我很想诉诸于bash脚本,但这感觉像是作弊,没有使用正确的工具来完成工作。我猜问题是我想在不同的文件上调用Make
您需要另一个规则来构建二进制文件:
$(BINDIR)/%: $(OBJDIR)/%.o
$(CC) -o $@ $< $(CFLAGS) # you don't actually need that line!
还有一个快捷规则:
TARGETS=$(patsubst $(SRCDIR)/%.cpp,%,$(wildcard $(SRCDIR)/*.cpp))
$(TARGETS): %: $(BINDIR)/%
.PHONY: $(TARGETS)
它允许你说make 1
而不是make bin/1
。
相关文章:
- 如何反转整数参数包
- 使用C++库在Android项目中修改gradle中的cmake参数,用于插入指令的测试
- 如何使用默认参数等选择模板专业化
- 模板参数替换失败,并且未完成隐式转换
- 具有默认模板参数的多态类的模板推导失败
- lambda参数转换为constexpr技巧,然后获取带链接的数组
- 将数组作为参数传递给函数安全吗?作为第三方职能部门,可以探索他们想要的之外的其他元素
- 函数调用中参数的顺序重要吗
- 部分定义/别名模板模板参数
- 模板-模板参数推导:三个不同的编译器三种不同的行为
- 使用不带参数的函数访问结构元素
- 基于另一个成员参数将函数调用从类传递给它的一个成员
- 如何在OMNET++中指定与命令行参数组合的输出文件名
- 如何使用Luacneneneba API正确读取字符串和表参数
- 在派生函数中指定void*参数
- 我是 C++ 的新手,我试图调用 make 一个以 2 个类作为其参数的类构造函数
- 使用不同可执行文件名的参数make
- 为具有9个以上参数的构造函数调用Microsoft::WRL::Make
- 用于构建提升的'stage'参数:"don't know how to make <e>stage"
- 我如何创建一个动态的make取决于我给它的参数