我编写了一下makefile,文件名就为MAKEFILE
当我执行NMAKE的时候,每次都是只把MkTester1.cpp(即第一个源文件)变异完后就结束了,后面的CPP文件始终不能被编译,各位请看我的MAKEFILE是不是有问题啊?
虽然所有的!MESSAGE后面的信息都能输出,但是只生成了MkTester1.obj一个文件!!INCLUDEFILE_PATH = D:\Progra~1\Micros~1\VC98\Include
LIBFILE_PATH = D:\Progra~1\Micros~1\VC98\Lib
CPP_FLAG = /c /MTd /Zi /Od /D_DEBUG /DWIN32!MESSAGE Create MkTester1.obj
MkTester1.obj: MkTester1.cpp
cl $(CPP_FLAG) /I$(INCLUDEFILE_PATH) MkTester1.cpp
# 每次只能编译到这个地方
!MESSAGE Create myapi.obj
myapi.obj : myapi.cpp myapi.h
cl $(CPP_FLAG) /I$(INCLUDEFILE_PATH) myapi.cpp!MESSage Create the executable file MkTester1.exe
LIBS = $(LIBFILE_PATH)\LIBCMTD.lib \
$(LIBFILE_PATH)\OLDNAMES.lib \
$(LIBFILE_PATH)\KERNEL32.LIBMkTester1.exe : MkTester1.obj myapi.obj
link MkTester1.obj myapi.obj $(LIBS)

解决方案 »

  1.   

    仔细看看是不是问题啊myapi.obj : myapi.cpp myapi.h
    cl $(CPP_FLAG) /I$(INCLUDEFILE_PATH) myapi.cpp比如路径不对,有编译连接错误等如果用的vc++的话,可以打开这个工程,再打开myapi.cpp文件,用Ctrl+F7编译一下看生成obj没
      

  2.   

    用VC编译当然没问题的啦!我只是想自己写makefiel来编译!
    因为自己写makefile文件要灵活的多!
    这个makefile文件中没有链接错误!
    当把
    MkTester1.obj: MkTester1.cpp
    cl $(CPP_FLAG) /I$(INCLUDEFILE_PATH) MkTester1.cpp
    给注释掉以后,就可以生成myapi.obj了!但是这样的话link又不执行了!
    好像是每次只能执行一次cl命令!这是为什么啊?
    还是nmake需要指定特定的参数才能执行makefile中的所有cl命令?
      

  3.   

    你为什么要分开写!2个点目标文件写在一起试试?
    还有和你的src文件和makefile文件方的地方有关系.
      

  4.   

    估计你的makefile和MkTester1.cpp在一个路径下!
      

  5.   

    .cpp.obj   : cl $*.cpp
    就可以编译,但是为什么我单独编译每个文件就不行呢?
      

  6.   

    INCLUDEFILE_PATH = D:\Progra~1\Micros~1\VC98\Include
    LIBFILE_PATH = D:\Progra~1\Micros~1\VC98\Lib
    CPP_FLAG = /c /MTd /Zi /Od /D_DEBUG /DWIN32#需要在这里添加一个
    OBJS   = MkTester1.obj myapi.obj
    all: MkTester1.exe
      

  7.   

    还有怎么在makefile中使用环境变量啊?
    如:
    LIBS = $(LIBFILE_PATH)\LIBCMTD.lib  $(LIBFILE_PATH)\OLDNAMES.lib  $(LIBFILE_PATH)\KERNEL32.LIB
    想要写成
    LIBS = LIBCMTD.LIB OLDNAMES.LIB KERNEL32.LIB
    的话需要怎样设置环境或加什么参数才能使CL找到这些库文件?就像CL指定 /I参数就可以指定头文件的位置一样!
      

  8.   

    我知道了!
    其实只要在MAKEFILE的开头指定需要进行哪些编译或链接操作即可
    即:
    MYOUTPUT : MkTester1.obj myapi.obj MkTester1.EXE MkTester2
    然后再给MYOUTPUT指定的所有项指定编译或链接操作即可:MkTester1.obj :....
        CL ...
    myapi.obj : ...
        CL ...MkTester1.EXE 
        LINK ... /OUT:MkTester1.exe
    MkTester2
        LINK ... /OUT:MkTester2.exe总算搞清楚了!:)
      

  9.   

    要注意 :和 = 再makefile中的作用!
    = 用于定义宏
    :用于指定targets和dependencis只见的关系!