我有一個運行二進制文件生成cpp文件的makefile。然後我編譯cpp文件併爲每個cpp文件生成.o文件。如何強制重新生成makefile中的變量
問題是首先被調用的生成文件時,該文件夾是空的,因爲二值尚未調用和
CPP_FILES=$(wildcard $(MY_DIR)/inc/output/*.cpp)
將是一個空的變量。
所以我改了行,以
CPPFILES=$$(wildcard $(MY_DIR)/inc/output/*.cpp)
OBJFILES=$$(patsubst $(MY_DIR)/*.cpp,$(MY_DIR)/*.o,$(CPPFILES))
和
//跑到二進制生成cpp文件
.SECONDEXPANSION:
libEXP.so:$(CPPFILES),$(OBJFILES)
$(CC) $(CFLAGS) -I(INC) -L(LIBS) -shared -o $(OBJFILES) [email protected]
二級擴展失敗說外殼找不到通配符命令。
我在做什麼錯?
嗨MadScientist,謝謝你解釋,但這就是爲什麼我使用scendexpansion,如果它沒有重新評估價值並堅持原來的價值,那該怎麼辦。有趣的是,如果我在CPPFILES定義中替換通配符行,通過shell命令「find $ MY_DIR -name」* .cpp「-type f」,正確地得到我的列表,但我仍然遇到patsubst命令的問題。如果secondexapnsion僅適用於shell函數,那麼我想知道如何在secondexpansion上製作文檔,並說它可以與patsubst一起使用。 – learningtocode 2012-03-19 22:43:22
我想我真正要問的是有沒有一種方法可以使用wildacrd函數,而不會抱怨找不到命令通配符。另外,可以遞歸解決這個問題,我認爲先決條件列表中的變量是從讀取階段的所有包含makefile中讀取的? – learningtocode 2012-03-19 23:55:42
其實Madscienist是對的。我把這條規則放在一個makefile文件中,並將這行文件移動到另一個makefile .o文件和庫中。我從第一個makefile遞歸地調用第二個makefile,並且它工作正常!我幾乎已經放棄了。但我仍然不明白gnu中的這個例子如何使文檔工作。反正非常感謝MadScientist和Eldar! – learningtocode 2012-03-21 00:26:06