繁体   English   中英

makefile:如何生成目标文件到上层目录

[英]makefile: how to generate object files to upper directory

我有一个makefile ,如下所示,它可以编译和链接同一目录中的所有cpp文件:

g++1x:=g++ -std=c++14 -stdlib=libc++ -MMD -MP
cflags:= -Wall -lncurses

TARGET:=matrix.out
CPPFILES:=$(wildcard *.cpp)
OBJDIRECTORY:=.obj
OBJFILES:=$(addprefix $(OBJDIRECTORY)/,$(notdir $(CPPFILES:.cpp=.o)))

.PHONY: install
install: $(OBJDIRECTORY) $(TARGET)

$(OBJDIRECTORY):
    mkdir -p $(OBJDIRECTORY)

$(TARGET): $(OBJFILES)
    $(g++1x) $(cflags) -o $@ $^ -g

$(OBJDIRECTORY)/%.o: %.cpp
#%.o: %.cpp
    $(g++1x) -c -o $@ $< -g

-include $(addprefix $(OBJDIRECTORY)/,$(notdir $(CPPFILES:.cpp=.d)))

.PHONY: clean
clean:
    rm -f $(TARGET)
    rm -rf $(OBJDIRECTORY)

当我执行make ,将创建一个.obj并且所有obj文件都在其中。 另外,还将生成一个可执行文件。 现在一切都很好。

现在,我正在尝试组织我的项目。 我的计划是创建一些子目录,每个子目录都包含一个makefile。 当我执行一个makefile时,它将在某个固定路径生成obj文件。 最后,我可以执行一个makefile来链接main.cpp和所有obj文件以获得可执行文件。

但是我不知道如何为子目录编写这样的makefile。 我做了如下尝试,但是没有用。

project
   |--- main.cpp
   |--- makefile
   |--- subdir
          |--- test.h
          |--- test.cpp
          |--- makefile

这是我在project/subdir makefile:

g++1x:=g++ -std=c++14 -stdlib=libc++ -MMD -MP
cflags:= -Wall -lncurses

CPPFILES:=$(wildcard *.cpp)
OBJDIRECTORY:=../.obj
TARGET:=$(OBJDIRECTORY)/%.o
OBJFILES:=$(addprefix $(OBJDIRECTORY)/,$(notdir $(CPPFILES:.cpp=.o)))


.PHONY: install
install: $(OBJDIRECTORY) $(TARGET)

$(OBJDIRECTORY):
    mkdir -p $(OBJDIRECTORY)

$(TARGET): %.cpp
#%.o: %.cpp
    $(g++1x) -c $@ $< -g

-include $(addprefix $(OBJDIRECTORY)/,$(notdir $(CPPFILES:.cpp=.d)))

.PHONY: clean
clean:
    rm $(OBJDIRECTORY)/%.o

错误:

make:***没有规则将目标../.obj/%.o', needed by install'。 停止。

不要将文件放在路径的父目录中; 解决问题:在$(MAKE) s子目录的根目录中有一个Makefile ,并在那里使用obj文件。

您在这里遇到几个问题。

在您的原始makefile中,变量TARGET包含字符串“ matrix.out”,一切正常。

在你的subdir/makefile ,变量TARGET包含字符串“../.obj/%.o”,和你问做构建 它可以找到的唯一规则:

$(TARGET): %.cpp
    ...

没有帮助,因为在任何地方都没有名为“%.cpp”的文件。

我建议您尝试这样的事情:

install: $(OBJFILES)

$(OBJFILES): $(OBJDIRECTORY)/%.o: %.cpp $(OBJDIRECTORY)
    $(g++1x) -c $@ $< -g

一旦工作成功,您就可以担心获取主makefile来调用sun-makes的问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM