【问题标题】:Multiple source paths in batch-mode rule [nmake]批处理模式规则中的多个源路径 [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 ::

【问题讨论】:

    标签: c++ makefile compilation nmake


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

    【讨论】:

      猜你喜欢
      • 2012-09-27
      • 1970-01-01
      • 1970-01-01
      • 2017-11-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多