如何在Makefile中调用nmake编译子目录工程?
如何在Makefile中调用nmake编译子目录工程?
兄弟,我太懂你踩的这个坑了!nmake的参数逻辑和咱们常用的GNU Make完全不一样,你现在的问题就出在那个-C参数上。
你看,在GNU Make里-C是用来切换到目标目录再执行编译,但nmake的-C(注意是大写)是用来指定命令行选项的响应文件的,根本不是切换目录的意思!你之前写的$(MAKE) -C $(SUB_DIR),其实是让nmake去读.subdir这个响应文件,但这个文件压根不存在啊,所以nmake啥也没做就退出了,看起来就像命令打印出来但没实际执行一样。
给你两个靠谱的解决方案:
- 方案一:直接切换目录后执行nmake,用
&&保证只有cd成功才会执行后续的nmake:
SUB_DIR=.\subdir test.exe: cd $(SUB_DIR) && nmake
- 方案二:如果担心切换目录后影响后续的其他操作,可以用cmd的
pushd和popd来临时切换目录,执行完编译再切回原目录:
SUB_DIR=.\subdir test.exe: pushd $(SUB_DIR) && nmake && popd
你可以手动验证下:在顶层目录直接敲cd .\subdir && nmake,肯定和你进目录手动运行的效果一模一样;但敲nmake -C .\subdir就会和你遇到的情况一样,啥反应都没有——这就坐实了是参数用错的问题。
备注:内容来源于stack exchange,提问作者DJames
相关产品推荐
相关产品推荐

