【问题标题】:Makefile on different folders不同文件夹上的 Makefile
【发布时间】:2015-05-20 18:10:16
【问题描述】:

我知道它已经被讨论了很多,但我有点疯狂,无法自己弄清楚。

我正在尝试学习如何创建 makefile,但在为不同文件夹中的文件定义 makefile 时遇到问题。

这是我想在编译后得到的:

/makefile
/test.exe
/src/factorials.cpp
/src/main.cpp
/src/hello.cpp
/obj/factorials.o
/obj/main.o
/obj/hello.o
/include/functions.h

这个makefile有什么问题?

C++ = g++
FILENAME = test
SOURCES_PATH = src/
SRC = $(SOURCES_PATH)factorial.cpp $(SOURCES_PATH)main.cpp $(SOURCES_PATH)hello.cpp
OBJ = factorial.o main.o hello.o

all: test.exe

test.exe: $(OBJ)
$(C++) $(OBJ) -o $(FILENAME) -Iinclude

%.o: 
$(C++) -c $(SOURCES_PATH)$*.cpp -Iinclude

clean:
rm -f test.exe

一切正常,但尝试编译 src/all.cpp 时出错。此外,我不知道如何对 g++ 说将 .o 文件放入 obj/ 文件夹。

非常感谢!

【问题讨论】:

  • 您可以将obj/设置为工作文件夹,并将$(vpath)设置为src/。还取决于您的 makefile 实际所在的位置,只需编写 OBJ = obj/factorial.o obj/main.o obj/hello.o 并设置 vpath 也可能会有所帮助。

标签: c++ makefile g++


【解决方案1】:

您应该按如下方式修复您的 .o 规则

obj/%.o: $(SOURCES_PATH)/%.cpp
    $(CC) $(CXXFLAGS) $< -o $@

或者$(vpath) 可用于解析make 在何处查找目标的源(先决条件)文件:

vpath += $(SOURCES_PATH)

obj/%.o: %.cpp
    $(CC) $(CXXFLAGS) $< -o $@

【讨论】:

  • 我不知道为什么,但是用你的代码我得到了no rule to make target obj/factorial.o...
【解决方案2】:

看来我可以通过使用以下makefile来获得结果

C++ = g++
FILENAME = test
OBJS = obj/factorial.o obj/hello.o obj/main.o
INC = -Iinclude/
vpath+= src

$(FILENAME): $(OBJS)
    $(C++) $(OBJS) -o $@ $(INC)

obj/%.o: %.cpp
    $(C++) -o $@ -c $< $(INC)

all: $(FILENAME)

clean:
    rm -rf objs/*.o *~ $(FILENAME).exe

谢谢! :)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多