代码之家  ›  专栏  ›  技术社区  ›  Cheeso

nmake.exe:有没有办法从宏中指定的一组文件中排除一个文件?

  •  0
  • Cheeso  · 技术社区  · 14 年前

    我在找类似的东西 Exclude

    有可能吗?

    假设我有一个makefile来定义这个宏:

    SOURCES=xxx.c  yyy.c  zzz.c
    

    我用 nmake OLD=xxx.c NEW=bbb.c

    yyy.c zzz.c  bbb.c 
    

    …基本上用bbb.c代替xxx.c?

    文件可以以任何顺序出现。


    如果nmake宏中可能的字符串替换允许对宏求值,那么这将非常容易。

    sources=xxx.c yyy.c zzz.c
    objs=$(sources:.c=.o)
    

    $(objs)的值是

    xxx.o yyy.o zzz.o
    

    但是 nmake does not allow a macro for the value of either argument to that substitution . 我不能这样做:

    new=.o
    sources=xxx.c yyy.c zzz.c
    objs=$(sources:.c=$(new))
    
    1 回复  |  直到 14 年前
        1
  •  1
  •   Cheeso    14 年前

    它涉及到一种叫做 "inline files" nmake动态创建并在命令块中使用的文件。在我的例子中,我使用了“内联文件”技巧来创建一个.cmd文件并运行它。cmd文件执行include/exclude逻辑,然后在经过处理的源文件列表上运行编译器。

    看起来像这样。

      CSOURCE=Fribble.c Zambda.c Twoolie.c
             ....
      target :
              <<tmp-build-file.cmd  $(CSOURCE)
          SETLOCAL ENABLEDELAYEDEXPANSION
          for %%I in (%*) do if NOT %%I == $(EXC) (
             set filesToBuild=!filesToBuild! %%I
          )
          $(CC) $(INC) !filesToBuild!
          ENDLOCAL
      <<
    

    nmake INC=AdditionalFile.c  EXC=Zambda.c  target
    

    …它做了正确的事情:编译Fribble.c Twoolie.c和AdditionalFile.c,但不编译Zambda.c。