Nmake 从 .cpp 文件中获取所有 .o 文件的列表
Posted
技术标签:
【中文标题】Nmake 从 .cpp 文件中获取所有 .o 文件的列表【英文标题】:Nmake getting a list of all .o files from .cpp files 【发布时间】:2009-12-17 18:32:12 【问题描述】:我正在使用 nmake 将多个源文件编译成一个精灵。但是我不想在这样的长列表中指定 .o 文件:
OBJS = file1.o file2.o file3.o
我更喜欢使用通配符,将当前目录中的所有 .o 文件指定为 .elf 的依赖项。但是,在我从 .cpp 文件编译它们之前,.o 文件不存在。有没有办法使用通配符扩展获取 cpp 文件列表,然后进行字符串替换以将 .cpp 替换为 .o。
【问题讨论】:
【参考方案1】:在 NMAKE 中没有一种特别优雅的方式来执行此操作。如果可以的话,您应该改用 GNU Make,它在 Windows 上可用,并且使许多任务变得更加容易。
如果您必须使用 NMAKE,那么您必须使用递归 make 来自动执行此操作,因为 NMAKE 仅在先决条件列表中扩展通配符。我在回答另一个类似的问题here时演示了如何做到这一点。
希望对您有所帮助。
【讨论】:
【参考方案2】:我更熟悉 Unix make 和 gmake,但你可以使用:
OBJS = $(SOURCES:.cpp=.o)
(假设您的源文件可以在 SOURCES 中列出)
【讨论】:
这会起作用,但是我会遇到同样的问题,即指定 .cpp 文件列表而不是 .o 文件。我的目标是不必每次添加或删除源文件时都编辑 make 文件。【参考方案3】:Here 是另一个可能对您有所帮助的答案。
另一种解决方案可能是使用包装批处理文件,您可以在其中使用“for”循环创建所有 .cpp 文件的列表,例如
del listoffiles.txt
echo SOURCES= \ >> listoffiles.txt
for %i in (*.dll) do @echo %i \ >>listoffiles.txt
echo. >> listoffiles.txt
之后,您可以尝试在 nmake 中将其与 !INCLUDE 预处理器宏一起使用:
!INCLUDE listoffiles.txt
(我确信这不会从头开始工作,但总体思路应该很清楚)。
【讨论】:
以上是关于Nmake 从 .cpp 文件中获取所有 .o 文件的列表的主要内容,如果未能解决你的问题,请参考以下文章