【发布时间】:2018-01-20 05:11:07
【问题描述】:
我正在尝试构建一个由分布在各个子目录中的源组成的项目,例如
Project root
├───build
└───src
│ main.cpp
│
├───ui
│ more files
│
└───core
more files
以下是我正在使用的 makefile 的相关部分:
EXT := cpp
SRC_DIR := src/ui src src/core
SOURCES := $(foreach sdir,$(SRC_DIR),$(wildcard $(sdir)/*.$(EXT)))
OBJECTS := $(SOURCES:.$(EXT)=.o)
BIN := program
$(BIN): $(OBJECTS)
$(LD) $(LDFLAGS) -mwindows $^ -o $@ $(LDLIBS)
$(OBJECTS): $(SOURCES)
$(CC) $(CFLAGS) -c $< -o $@
这将导致以下错误消息:undefined reference to WinMain 可能是因为它无法找到包含 main 函数的 main.o 文件。
将所有目标文件移动到build 文件夹是否可以解决此问题?最好的方法是什么?
【问题讨论】:
-
如果您删除 $(OBJECTS) 目标,它应该可以工作。默认目标将使用
$(CXX) $(CXXFLAGS) -c -o $@ $<。 -
@ssbssa 工作正常。如果您还想移动目标文件,但是您需要一个明确的规则,对吗?
-
我想你的意思是这样的:
objdir/%.o: %.cpp ; $(CXX) $(CXXFLAGS) -c $< -o $@
标签: makefile mingw gnu-make mingw-w64