【问题标题】:MSVS2012 c++ nmake how do run nmake on a makefile in a subdirectory?MSVS2012 c++ nmake 如何在子目录中的 makefile 上运行 nmake?
【发布时间】:2018-04-03 16:36:19
【问题描述】:

我有一个项目,其中包含一个顶级 makefile 和三个子文件夹,每个子文件夹中都有一个 makefile。

在普通的 makefiles (gnu make) 中我可以这样做:

# Just for me so I can read my own makefile -->  TARGET: DEPEND
_TARGET = $@
_DEPEND = $<

# Sub projects to build in dependency order
SUB_PROJECTS = folder2 folder1 folder3

.PHONY: $(SUB_PROJECTS)

all: $(SUB_PROJECTS)
@echo makeing all

$(SUB_PROJECTS):
@echo "*******************************"
@echo "*   MAKING: $(_TARGET)"
@echo "*******************************"
$(MAKE) -C $(_TARGET)
@echo

这里我基本上是在调用make -C folder1 对子文件夹“folder1”中的makefile 运行make。

所以我正在尝试将我的 gnu makefile 转换为 nmake。在大多数情况下,我并没有遇到太多麻烦(.phony 的东西与这里不同)。

但我似乎无法在子文件夹中找到调用 nmake 的语法:

nmake folder1 不起作用。我查看了所有的标志,它们中没有一个看起来很明显。 nmake 上的文档不容易浏览(即找到你想要的)。

【问题讨论】:

    标签: c++ visual-studio makefile nmake


    【解决方案1】:

    我不相信 nmake 有类似 (gnu)make 的 -C 选项,你需要做类似的事情

    $(SUB_PROJECTS):
        cd $@
        $(MAKE) /$(MAKEFLAGS)
        cd $(MAKEDIR)
    

    【讨论】:

    • 这是一个公平的观点,非常直截了当:) .. 但我偶然发现了另一种可能更好的方法,因为“回声线在自己的外壳中运行”的东西 - 我会说的下来作为答案,看看你的想法
    • @code_fodder 是的,您的解决方案似乎非常等效,尽管使用多个 shell 没有风险,因为它不像 pushd 那样依赖于连续环境。顺便说一句,您应该考虑使用$(MAKE) /$(MAKEFLAGS) 代替nmake,因为它会传播选项并确保执行相同的nmake 二进制文件。
    • 两者都好...我确实使用 $(MAKE) 正常但在这个例子中没有...但是 makeflags 是个好主意:)
    【解决方案2】:

    我刚刚找到了这个链接:UsingNmake,这表明:

    遍历目录“makefile”

     DIRS = \ 
             dir1 \ 
             dir2 \ 
             dir3
    
     all: $(DIRS)
    
     $(DIRS):
             pushd $@ & nmake & popd
    

    它解释了为什么在一行中这样做更好......

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-08-06
      • 2023-03-22
      • 1970-01-01
      • 1970-01-01
      • 2012-09-15
      • 2014-06-26
      • 1970-01-01
      相关资源
      最近更新 更多