我需要所有目标文件名的列表,并将路径写入文本文件。由于它是V3.79,所以我无法使用GNU make的文件功能。这个列表真的很庞大,因为它是一个很大的项目,因此我遇到了“ make(e = 87):参数不正确”错误,因为它超过了32K Windows命令行长度限制。
最初的问题是我需要将对象列表作为参数传递给archiver.exe来创建一个库,该库也产生了e = 87问题。它与列出的问题here几乎相同。那是我决定将此列表放入文本文件并将该文件作为参数传递给archiver.exe的时候。但是我受困是因为创建文件本身会产生相同的错误。以下是我尝试的方法:
MY_OBJECTS = $(shell $(FIND) $(MY_OBJPATH) -name '*.o')
MY_OBJECTSLIST = objlist.txt
all:
@echo $(MY_OBJECTS) > $(MY_OBJECTSLIST)
我需要一种解决方案,以某种方式将整个对象列表放入文本文件。
答案 0 :(得分:0)
您可以使用file功能。
all:
$(file > $(MY_OBJECTSLIST) $(MY_OBJECTS))
请注意,对MY_OBJECTS
文件的搜索会在评估MY_OBJECTS
之后立即进行,无论您是否正在运行相关目标。在这种情况下,您可以将工作从make卸载到实际目标中的shell。 find
的输出是流,没有shell命令行长度的限制。
另外,objlist.txt
是一个文件!这就是make
最好的地方-准确地在需要时立即构建文件。
all: objlist.txt
@echo $(MY_OBJECTS) > $(MY_OBJECTSLIST)
objlist.txt: <should better depend on the condition that all the *.o files are already built>
$(FIND) $(MY_OBJPATH) -name '*.o' > objlist.txt
答案 1 :(得分:0)
使用中间文件吗?
MY_OBJECTS = $(shell $(FIND) $(MY_OBJPATH) -name '*.o' | tee objects.txt)
MY_OBJECTSLIST = objlist.txt
all:
cp objects.txt ${MY_OBJECTSLIST}
这里当然有很多优化的机会。