使用make将目标文件放在特定目录中

问题描述 投票:0回答:1

我一直在研究使用make构建cpp应用程序并在线查看各种资源。当它起作用时,我正在尝试构建目标文件并将其放置在特定目录中,而不是将它们与源文件放入相同的src /中。理想情况下,我希望它们进入OUT_O_DIR位置,但是它们是生成并放置在src /中的,这是我不希望的。

我想要这样的结构:

.
|- Makefile
|- include/
| |- *.h
|- src/
| |- *.c
|- output/
| |- App
|- obj/
| |- *.o

我的版本:

GNU Make 4.1
Built for x86_64-pc-linux-gnu

我的Makefile:

OUT_O_DIR := $(OUT_DIR)/obj
PROJ = hello
SOURCE = $(wildcard src/*.cpp)
INC = $(wildcard include/*.h)
OBJS = $(SOURCE:.cpp=.o)
CFLAGS = -I include
CC = g++

.PHONY: directories

all :   directories $(OUT_DIR)$(PROJ)

directories:    $(OUT_DIR)

$(OUT_DIR)$(PROJ) : $(OBJS)
    $(CC) -o $@ $(OBJS)

.cpp.o: $(INC)
    @echo $@    
    $(CC) -c $(CFLAGS) $< -o $@ 

clean :
    rm -rf $(OUT_DIR)

$(OUT_DIR): 
    mkdir -p $(OUT_DIR)
c++ makefile g++
1个回答
0
投票

'。cpp.o'不能扩展到涵盖多个文件夹。两个选项

修改OBJS和规则以构建对象。

#OBJS = $(SOURCE:.cpp=.o)
OBJS = $(SOURCE:src/%.cpp=$(OUT_O_DIR)/%.o)

...

#.cpp.o: $(INC)
${OUT_O_DIR}/%.o: src/%.cpp $(INC)
        $(CC) -c $(CFLAGS) $< -o $@

或使用vpath指定.cpp文件位于src中

#OBJS = $(SOURCE:.cpp=.o)
OBJS = $(SOURCE:src/%.cpp=$(OUT_O_DIR)/%.o)

vpath %.cpp src

${OUT_O_DIR}/%.o: %.cpp $(INC)
        $(CC) -c $(CFLAGS) $< -o $@
© www.soinside.com 2019 - 2024. All rights reserved.