我如何创建一个动态的make取决于我给它的参数

How do I create a dynamic make that depends on what arguments I give it?

本文关键字:make 参数 动态 取决于 何创建 创建 一个      更新时间:2023-10-16

不幸的是,这是一个非常简单的问题,但我似乎找不到答案。我刚刚重新开始c++编程,我想用一些项目euler问题来重新训练我生锈的技能。我计划今晚快速完成前10个,但在我开始做makefile之前遇到了一个问题(我知道有点尴尬)。

说到点子上。我创建了一个如下的目录结构:

 ✗ tree
.
├── bin
├── inc
├── Makefile
├── obj
└── src
    └── 1.cpp

我的想法是,我会在src中创建一堆单独的文件,并将它们编译为bin,但我一直无法弄清楚如何做到这一点。(makefile不适合这个吗?我想这就足够了)。

我想我可以用这样的语法调用它:

make 1

src/1.cpp编译bin/1obj/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