有与 makefile 相关的噩梦

发布于 2025-01-02 10:51:36 字数 1036 浏览 0 评论 0原文

如果我尝试 make all,我得到:

make: ***No rule to make target 'src\SOURCES', needed by 'all'. Stop.

如果我尝试 make qwark,我得到:

make: ***No rule to make target 'obj\src\SOURCES' needed by 'qwark'. Stop.

如果我尝试 make qwark.o,我得到

Fatal error: can't create obj\qwark.o: No such file or directory
make: *** [qwark.o] Error 1

Here's我的源代码,供您观看......

COMPILER := g++
CFLAGS := 
LDFLAGS := 
SOURCES := quark.cc
SOURCES := $(addprefix src\,SOURCES)
OBJECTS := $(addprefix obj\,$($(notdir SOURCES):.cc=.o))
EXECUTABLE := qwark.exe
DEBUG := bin\debug\$(EXECUTABLE)
NORMAL := bin\release\$(EXECUTABLE)

all: $(SOURCES) $(EXECUTABLE)

release: qwark
normal: qwark

qwark: $(OBJECTS)
    $(CC) $(LDFLAGS) $(OBJECTS) -o $@

qwark.o: src\qwark.cc
    $(CC) $(CFLAGS) -c src\qwark.cc -o obj\qwark.o

%.o: src\%.cc
    $(CC) $(CFLAGS) -c $(input) -o obj\$(output)

请有人告诉我我做错了什么..............

If I try make all, I get:

make: ***No rule to make target 'src\SOURCES', needed by 'all'. Stop.

If I try make qwark, I get:

make: ***No rule to make target 'obj\src\SOURCES' needed by 'qwark'. Stop.

If I try make qwark.o, I get

Fatal error: can't create obj\qwark.o: No such file or directory
make: *** [qwark.o] Error 1

Here's my source code, for your viewing pleasure...

COMPILER := g++
CFLAGS := 
LDFLAGS := 
SOURCES := quark.cc
SOURCES := $(addprefix src\,SOURCES)
OBJECTS := $(addprefix obj\,$($(notdir SOURCES):.cc=.o))
EXECUTABLE := qwark.exe
DEBUG := bin\debug\$(EXECUTABLE)
NORMAL := bin\release\$(EXECUTABLE)

all: $(SOURCES) $(EXECUTABLE)

release: qwark
normal: qwark

qwark: $(OBJECTS)
    $(CC) $(LDFLAGS) $(OBJECTS) -o $@

qwark.o: src\qwark.cc
    $(CC) $(CFLAGS) -c src\qwark.cc -o obj\qwark.o

%.o: src\%.cc
    $(CC) $(CFLAGS) -c $(input) -o obj\$(output)

Please, someone, tell me what it is I'm doing wrong..........

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

蓝色星空 2025-01-09 10:51:36

您正在修改文字 SOURCES 单词,而不是相应的变量值。尝试以下操作:

SOURCES := quark.cc

SOURCES := $(addprefix src\,$(SOURCES))
OBJECTS := $(addprefix obj\,$(patsubst %.cc,%.o,$(notdir $(SOURCES))))

或者更简单:

SOURCES := quark.cc

OBJECTS := $(SOURCES:%.cc=obj\%.o)
SOURCES := $(SOURCES:%=src\%)

You're modifying a literal SOURCES word, instead of the corresponding variable value. Try the following:

SOURCES := quark.cc

SOURCES := $(addprefix src\,$(SOURCES))
OBJECTS := $(addprefix obj\,$(patsubst %.cc,%.o,$(notdir $(SOURCES))))

Or, much simpler:

SOURCES := quark.cc

OBJECTS := $(SOURCES:%.cc=obj\%.o)
SOURCES := $(SOURCES:%=src\%)
晌融 2025-01-09 10:51:36

当 SOURCES 变量位于右侧时展开它吗?

SOURCES := $(addprefix src\,$(SOURCES))
OBJECTS := $(addprefix obj\,$($(notdir $(SOURCES)):.cc=.o))

Expand the SOURCES variable when its on the rhs?

SOURCES := $(addprefix src\,$(SOURCES))
OBJECTS := $(addprefix obj\,$($(notdir $(SOURCES)):.cc=.o))
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文