我有一个运行二进制文件生成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