3

我正在使用 nmake 将多个源文件编译成一个精灵。但是我不想在这样的长列表中指定 .o 文件:

OBJS = file1.o file2.o file3.o

我更喜欢使用通配符,将当前目录中的所有 .o 文件指定为 .elf 的依赖项。但是,在我从 .cpp 文件编译它们之前,.o 文件不存在。有没有办法使用通配符扩展获取 cpp 文件列表,然后进行字符串替换以将 .cpp 替换为 .o。

4

3 回答 3

5

在 NMAKE 中没有一种特别优雅的方法可以做到这一点。如果可以,您应该改用 GNU Make,它在 Windows 上可用,并且使许多任务变得更加容易。

如果您必须使用 NMAKE,那么您必须使用递归 make 来自动执行此操作,因为 NMAKE 仅在先决条件列表中扩展通配符。我演示了如何在此处回答另一个类似问题时执行操作。

希望有帮助。

于 2009-12-17T20:29:06.970 回答
0

是另一个可能对您有所帮助的答案。

另一种解决方案可能是使用包装批处理文件,您可以在其中使用“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 

(我确信这不会从头开始工作,但总体思路应该很清楚)。

于 2009-12-17T18:53:32.210 回答
0

我更熟悉 Unix make 和 gmake,但你可以使用:

OBJS = $(SOURCES:.cpp=.o)

(假设您的源文件可以在 SOURCES 中列出)

于 2009-12-17T18:41:07.307 回答