2017-07-31 101 views
0

在這裏工作是我的問題的Makefile,與子目錄模式規則只與第一依賴

SOURCES_FUNCTIONS=cJSON.c parallelisationUtilities.c 
$(BUILD_DIR)/%.o : $(SOURCE_DIR)/%.c  
    $(CC) $(CFLAGS) -c $< -o [email protected] $(IFLAGS) 

化妝:*** Aucune REGLE倒fabriquer拉cible«parallelisationUtilities.o»,nécessaire倒«編譯/ mainFunction »。 Arrêt

通過將cJSON.c放在SOURCES_FUNCTIONS之前的parallelisationUtilities.c中,我得到了與cJSON.o相同的錯誤。富勒肯定的是,沒有丟失文件..

++ 邁克爾

回答

1

你沒有表現出makefile文件就夠了:你離開了這是什麼樣的目標是上市的目標文件爲前提條件的最關鍵部分。

我敢打賭,你有這樣的事情:

xxxx: $(BUILD_DIR)/$(SOURCES_FUNCTIONS:.c=.o) 

這是不對的,因爲它只會增加$(BUILD_DIR)到第一個文件。的$(SOURCES_FUNCTIONS:.c=.o)擴展提供了:

xxxx: $(BUILD_DIR)/cJSON.o parallelisationUtilities.o 

您需要使用這樣的事情:

xxxx: $(patsubst %.c,$(BUILD_DIR)/%.o,$(SOURCES_FUNCTIONS)) 

使得BUILD_DIR前綴的所有文件。

0
$(BUILD_DIR)/$(EXEC_MAINFUNCTION): $(patsubst %.o,$(BUILD_DIR)/%.o,$(OBJECTS_FUNCTIONS)) $(patsubst %.o,$(BUILD_DIR)/%.o,$(OBJECTS_FUNCTIONS_NOT_TO_CLEAN)) $(patsubst %.o,$(BUILD_DIR)/%.o,$(OBJECT_MAINFUNCTION)) 
    $(CC) $^ -o [email protected] $(LDFLAGS) 

$(BUILD_DIR)/%.o : $(SOURCE_DIR)/%.c 
    $(CC) $(CFLAGS) -c $< -o [email protected] $(IFLAGS) 

非常感謝瘋狂!

+0

更簡單的IMO是$(addprefix $(BUILD_DIR)/,$(OBJECTS_FUNCTIONS)$(OBJECTS_FUNCTIONS_NOT_TO_CLEAN)$(OBJECT_MAINFUNCTION))' – MadScientist