makefile学习笔记&C++编译

静态链接库创建

  1. ar -rv maze.a BaseRouter.o ,将BaseRouter.o加入maze.a这个静态链接库中
  2. ranlib maze.a ,更新静态链接库符号表
  3. 库文件一般将.cpp改成.cxx

makefile笔记

  1. .PHONY: clean  表示clean为伪目标,否则如果文件夹下有clean文件会出错
  2. 而命令中的<</span> 和<span class="lang:default decode:true crayon-inline ">@ 则是自动化变量,<</span> 表示所有的依赖目标集(也就是<span class="lang:default decode:true crayon-inline ">BaseRouter.cxx</span> ),<span class="lang:default decode:true crayon-inline ">@ 表示目标集(就是BaseRouter.o ),参见样例1
  3. makefile在target为.o的时候,dependence可以自动省略.cc,可以使用类似于main.o : defs.h 的语法
  4. makefile只会完成第一个规则的第一个目标
  5. (objects)</span> 只是单纯的变量展开,一般表现为多条命令都是由于多目标的生成</li> </ol> <h3>样例</h3> <h4>OOPWeek9_Makefile</h4> <pre class="lang:default decode:true" title="makefile">lSOURCES=(wildcard *.cxx)
    sSOURCES=(wildcard *.cpp) HEADERS=(wildcard *.h)
    lOBJECTS=(lSOURCES:%.cxx=%.o) sOBJECTS=(sSOURCES:%.cpp=%.o)
    TARGET=maze.exe
    LIB=maze.a

    all: (TARGET)(LIB)
    (TARGET):(sOBJECTS) (HEADERS)(LIB)
    @echo “Now Generating (TARGET) ..." 	g++(sOBJECTS) (LIB) -o(TARGET)
    (LIB):(lOBJECTS) (HEADERS) 	@echo "Now Generating(LIB) …”
    ar -rv (LIB)(lOBJECTS)
    ranlib (LIB) %.o: %.cpp(HEADERS)
    @echo “Now Compiling < ..." 	g++ -c< -o @ %.o: %.cxx(HEADERS)
    @echo “Now Compiling < ..." 	g++ -c< -o @ clean: 	rm *.o *.exe *.bak *.a explain: 	@echo "Lib Sources:(lSOURCES)”
    @echo “User Sources: (sSOURCES)" 	@echo "Lib Objects:(lOBJECTS)”
    @echo “User Objects: (sOBJECTS)" 	@echo "Lib:(LIB)”
    @echo “Target: $(TARGET)”

    BaseRouter.cxx	BaseRouter.h	OptRouter.h	main.cpp	makefile

     

发表评论

电子邮件地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据