我正在尝试构建一个项目,其中包含以各种子目录分发的源代码,例如从生成文件构建链接器时出错
Project root
├───build
└───src
│ main.cpp
│
├───ui
│ more files
│
└───core
more files
下面是生成文件的相关部分,我使用:
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 [email protected] $(LDLIBS)
$(OBJECTS): $(SOURCES)
$(CC) $(CFLAGS) -c $< -o [email protected]
这将导致以下错误消息:undefined reference to WinMain
大概是因为它找不到该main.o
文件,它包含的主要功能。
将所有目标文件移动到build
文件夹解决此问题,什么是最好的方法来做到这一点?
它应该工作,如果您删除$(OBJECTS)目标。默认目标将使用'$(CXX)$(CXXFLAGS)-c -o $ @ $ <'。 – ssbssa
@ssbssa工作正常。如果你还想移动目标文件,但是你需要明确的规则吗? –
我想你的意思是这个:'objdir /%。o:%.cpp; $(CXX)$(CXXFLAGS)-c $ <-o $ @' – ssbssa