讓我們說,我有幾個文件夾庫項目:C庫,生成文件頭的依賴
- 編譯:其中.o文件去
- lib目錄下:在編譯的靜態和動態庫去
- SRC:凡.C源文件去
- 包括:在頭文件放置
的問題是,每次我更改頭FIL e和make並沒有察覺到這一點(這很明顯,爲什麼如果你看看我的Makefile)並且說一切都是最新的。我已經設法用另一個不是圖書館的項目來解決這個問題,但是每次我嘗試一些東西時,最終都會遇到目標正在建造時的錯誤。這裏是Makefile中:
CC=gcc
CFLAGS=-g -O2 -Wall -Iinclude -rdynamic -DNDEBUG $(OPTFLAGS)
LDFLAGS=$(OPTLIBS)
SOURCES=$(wildcard src/*.c)
OBJECTS=$(patsubst src/%.c,build/%.o,$(SOURCES))
TARGET=lib/libdatastruct.a
SO_TARGET=$(patsubst %.a,%.so,$(TARGET))
# The Target lib
all: $(TARGET) $(SO_TARGET)
dev: CFLAGS=-g -Wall -Iinclude -Wall -Wextra $(OPTFLAGS)
dev: all
$(TARGET): CFLAGS += -fPIC
$(TARGET): build $(OBJECTS)
ar rcs [email protected] $(OBJECTS)
ranlib [email protected]
$(SO_TARGET): $(TARGET) $(OBJECTS)
$(CC) -shared -o [email protected] $(OBJECTS)
build/%.o: src/%.c
$(CC) $(CFLAGS) -o [email protected] -c $<
build:
@mkdir -p lib
@mkdir -p build
clean:
rm -rf lib build
這是唯一的辦法?因爲它有一個只包含一個文件的修改頭文件,所以整個項目都需要重建。 –
@cpassos沒有任何額外的假設,是的。任何源文件都可以包含任何頭文件,並且沒有關於這些包含的信息可用。 – 2501
@cpassos如果你不想重建所有東西,你可以手動或者編程方式創建特定的依賴關係。 – 2501