Nmake 从 .cpp 文件中获取所有 .o 文件的列表

发布于 2024-08-16 03:24:20 字数 239 浏览 3 评论 0原文

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

OBJS = file1.o file2.o file3.o

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

I'm using nmake to compile multiple source files into an elf. However I do not want to specify the .o files in a long list like this:

OBJS = file1.o file2.o file3.o

What I would prefer is to use a wildcard that specifies all .o files in the current directory as dependencies for the .elf. However, the .o files don't exist until I've compiled them from the .cpp files. Is there any way to get a list of cpp files using wildcard expansion and then do a string replacement to replace the .cpp with .o.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

装迷糊 2024-08-23 03:24:20

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

如果必须使用 NMAKE,则必须使用递归 make 才能自动执行此操作,因为 NMAKE 仅扩展先决条件列表中的通配符。我在此处演示了如何执行此操作< /a>.

希望有帮助。

There's not a particularly elegant way to do this in NMAKE. If you can, you should use GNU Make instead, which is available on Windows and makes many tasks much easier.

If you must use NMAKE, then you must use recursive make in order to do this automatically, because NMAKE only expands wildcards in prerequisites lists. I demonstrated how to do this in response to another similar question here.

Hope that helps.

肥爪爪 2024-08-23 03:24:20

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

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

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

I'm more familiar with Unix make and gmake, but you could possibly use:

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

(assuming your source files could be listed in SOURCES)

征棹 2024-08-23 03:24:20

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

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

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

Here is another answer that might help you.

Another solution may be to use a wrapper batch file, where you create a list of all .cpp files with a "for" loop, like

 del listoffiles.txt
 echo SOURCES= \ >> listoffiles.txt
 for %i in (*.dll) do @echo %i \ >>listoffiles.txt
 echo. >> listoffiles.txt

Afterwards, you can try to use this with the !INCLUDE preprocessor macro in nmake:

 !INCLUDE listoffiles.txt 

(I am sure this won't work from scratch, but the general idea should be clear).

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文