【发布时间】:2014-10-02 09:56:27
【问题描述】:
这是我的 .c 和 .o 文件层次结构:
---/src/IRBuild/main.c
func1.c
func2.c
---/inclue/main.h
func1.h
func2.h
---/build/IRBuild/main.o
func1.o
func2.o
irbuild
下面是我在 ~/src/IRBuild/ 下的 Makefile,我使用 .c 和 .h 文件构建了编译依赖项,这意味着每当 .c 或 .h 文件发生更改时。 “make”将重建目标文件。但是因为我将 .o 文件输出到 ~/build/IRBuild/,而不是当前目录,所以“make”将在我每次 make 时重建所有 .o 文件。
我应该如何使用其他目录中的 .o 文件构建依赖关系?仅在特定文件的 .c、.h 或 .o 文件更改时重新编译?
在这里呆了两天,非常感谢!
EXE=irbuild
# G++ as default compiler
CC=g++
# Compile time flags
CXXFLAGS = -g -Wall
# Library paths in addition to /usr/lib
LFLAGS=-std=c++0x
# Libraries to link into executable:
#LIBS = -lmylib -lm
# Include files directory other than /usr/include
INCLUDES=-I../../include/
SRC=$(wildcard *.cpp)
OBJ=$(SRC:.cpp=.o)
DEP=$(OBJ:.o=.d)
BUILD=../../build/IRBuild
TESTS=../../tests/
OBJS :=$(foreach obj, $(OBJ), $(BUILD)/$(obj))
.PHONY: depend clean
all: $(EXE)
cp $(EXE) $(TESTS)
$(EXE): $(OBJ)
$(CC) $(CXXFLAGS) $(LFLAGS) $(INCLUDES) -o $(EXE) $(OBJS)
.cpp.o:
$(CC) $(CXXFLAGS) $(LFLAGS) $(INCLUDES) -c $< -o $(BUILD)/$@
clean:
rm -f $(OBJS) $(DEP) $(EXE)
depend: .depend
.depend: $(SRC)
rm -f ./.depend
$(CC) $(CXXFLAGS) $(LFLAGS) $(INCLUDES) -MM $^ -MF ./.depend;
include .depend
【问题讨论】:
标签: c++ object makefile dependencies