批处理模式规则中的多个源路径 [nmake]

Posted

技术标签:

【中文标题】批处理模式规则中的多个源路径 [nmake]【英文标题】:Multiple source paths in batch-mode rule [nmake] 【发布时间】:2021-09-18 12:32:59 【问题描述】:

我将batch-mode rule 用于我的makefile。目前我有以下目标:

DIR_SRC = src
DIR_INCLUDE = include
DIR_LIB = lib
DIR_BIN = bin\x64
DIR_BUILD = build\x64    

$(DIR_SRC).cpp$(DIR_BUILD).obj ::
            @echo Compiling...
cl /c /EHsc /Fo$(DIR_BUILD)\ /MD /I$(DIR_INCLUDE) $<
    
$(EXECUTABLE_NAME) : $(DIR_BUILD)\*.obj
   @echo Linking $(EXECUTABLE_NAME)...
   link /out:$(DIR_BIN)\$(EXECUTABLE_NAME) $(DIR_BUILD)\*.obj

“bin/x64/*.obj”目标使用“src”文件夹中的所有 cpp 文件。是否可以为其添加另一个源路径?

我想要这样的东西

$(DIR_SRC) $(ANOTHER_DIR).cpp$(DIR_BUILD).obj ::

【问题讨论】:

【参考方案1】:

如果你添加一个 second 构建目录来匹配你的第二个源目录,你可以让它工作。例如,如果我们将您的 makefile 修改为:

DIR_SRC = src
DIR_SRC2 = another
DIR_INCLUDE = include
DIR_BIN = bin\x64
DIR_BUILD = build\x64
DIR_BUILD2 = build_another\x64
EXECUTABLE_NAME = foo.exe    

$(DIR_SRC).cpp$(DIR_BUILD).obj ::
    @echo Compiling...
    cl -nologo /c /EHsc /Fo$(DIR_BUILD)\ /MD /I$(DIR_INCLUDE) $<
    
$(DIR_SRC2).cpp$(DIR_BUILD2).obj ::
    @echo Compiling...
    cl -nologo /c /EHsc /Fo$(DIR_BUILD2)\ /MD /I$(DIR_INCLUDE) $<
    
$(DIR_BIN)\$(EXECUTABLE_NAME) : $(DIR_BUILD)\*.obj $(DIR_BUILD2)\*.obj
    @echo Linking $(EXECUTABLE_NAME)...
    link -nologo /out:$@ $**

那么我们会得到:

nmake -nologo

Compiling...
        cl -nologo /c /EHsc /Fobuild\x64\ /MD /Iinclude src\*.cpp
s1.cpp
s2.cpp
Generating Code...
Compiling...
        cl -nologo /c /EHsc /Fobuild_another\x64\ /MD /Iinclude another\*.cpp
a1.cpp
a2.cpp
Generating Code...
Linking foo.exe...
        link -nologo /out:bin\x64\foo.exe build\x64\*.obj build_another\x64\*.obj

其中src 包含s1.cpps2.spp,其中another 包含a1.cppa2.cpp

【讨论】:

以上是关于批处理模式规则中的多个源路径 [nmake]的主要内容,如果未能解决你的问题,请参考以下文章

nmake:批处理文件可以作为 make 命令块的一部分运行,影响 nmake.exe 进程的环境吗?

从多个源和不同模式序列化对象的更顺畅方法?

如果在批处理过程中 nmake 失败,则返回错误和电子邮件

将预处理器变量传递给 nmake 构建环境

解决‘nmake‘ 不是内部或外部命令,也不是可运行的程序 或批处理文件。

蚂蚁路径样式模式