【问题标题】:Nmake getting a list of all .o files from .cpp filesNmake 从 .cpp 文件中获取所有 .o 文件的列表
【发布时间】:2009-12-17 18:32:12
【问题描述】:

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

OBJS = file1.o file2.o file3.o

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

【问题讨论】:

    标签: wildcard nmake


    【解决方案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 
      

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

      【讨论】:

        猜你喜欢
        • 2020-02-11
        • 2013-11-26
        • 1970-01-01
        • 2011-12-10
        • 1970-01-01
        • 2022-01-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多