当前位置:   article > 正文

Makefile学习(二)[第二版]

Makefile学习(二)[第二版]

复杂实例

#示例1:在上一个示例的基础上再增加一个可执行文件03test[修改之处已标红]

.PHONY: clean all 

 

CC = gcc 

CFLAGS = -Wall -g

BIN = 01test 02test 03test

SOURCES = $(BIN:=.c)

OBJECTS = $(BIN:=.o)

 

all: $(BIN)

 

01test: 01test.o

02test: 02test.o

03test: 03test.o

 

.c.o:

    $(CC) $(CFLAGS) -c $< -o $@

 

clean:

    -rm -rf $(BIN) $(OBJECTS)

 

#示例2:在示例1上为03test添加一个自编的头文件pub.h[修改之处已标红]

.PHONY: clean all 

 

CC = gcc 

CFLAGS = -Wall -g

BIN = 01test 02test 03test

SOURCES = $(BIN:=.c)

OBJECTS = $(BIN:=.o)

 

all: $(BIN)

 

01test: 01test.o

02test: 02test.o

03test: 03test.o pub.o

 

.c.o:

    $(CC) $(CFLAGS) -c $< -o $@

 

clean:

    -rm -rf $(BIN) $(OBJECTS)

 

一个比较复杂的综合示例


  1. //1 pub.cpp
  2. int pub(int a,char *ch,int b)
  3. {
  4. char c = ch[0];
  5. switch(c)
  6. {
  7. case '+':
  8. return a+b;
  9. break;
  10. case '-':
  11. return a-b;
  12. break;
  13. case '*':
  14. return a*b;
  15. break;
  16. case '/':
  17. if (b != 0)
  18. {
  19. return a/b;
  20. }
  21. else
  22. {
  23. return -1;
  24. }
  25. break;
  26. default:
  27. return -1;
  28. break;
  29. }
  30. return 0;
  31. }

  1. //2 pub.h
  2. int pub(int a,char *ch,int b);

  1. //3 main.cpp
  2. #include <iostream>
  3. #include <stdlib.h>
  4. #include "pub.h"
  5. using namespace std;
  6. int main(int argc,char *argv[])
  7. {
  8. if (argc < 4)
  9. {
  10. cerr << "error" << endl;
  11. return -1;
  12. }
  13. cout << argv[1] << ' ' << argv[2] << ' ' << argv[3] << " = "
  14. << pub(atoi(argv[1]),argv[2],atoi(argv[3])) << endl;
  15. return 0;
  16. }

#4 Mackfile

.SUFFIXES:.cpp .o

 

CC=g++

SOURCE=main.cpp pub.cpp

OBJC=$(SOURCE:.cpp=.o) #将.cpp文件全部替换为.o文件

EXEC=mytest

 

all:$(OBJC)

$(CC) -o $(EXEC) $(OBJC)

 

.cpp.o:

$(CC) -o $@ -c $<

 

clean:

rm -rf $(OBJC)



附-如果一条语句在执行Mackfile文件时,不想打印出来,则在其前面加上@符号

 

比较专业的Makefile编写

#示例1

all: myapp

 

# Which compiler

CC = g++ 

 

# Where are include files kept

INCLUDE = .

 

# Options for development

FLAGS = -g -Wall -ansi

 

# Options for release

# CFLAGS = -O -Wall -ansi

 

.SUFFIXES:.cpp .o

 

SOURCE = main.cpp pub.cpp

OBJC = $(SOURCE:.cpp=.o)

EXEC = myapp

 

$(EXEC): ${OBJC}

$(CC) -o $(EXEC) $(OBJC) 

 

.cpp.o:

$(CC) -o $@ -I$(INCLUDE) $(FLAGS) -c $<

 

clean:

rm -rf $(OBJC) $(EXEC)

 

 

#示例2-添加了install选项

all: myapp

 

# Which compiler

CC = g++ 

 

# Where to install

INSTDIR = /usr/local/bin/

 

# Where are inlude files kept

INCLUDE = .

 

# Options for development

CFLAGS = -g -Wall -ansi

 

# Options for release

# CFLAGS = -O -Wall -ansi

 

.SUFFIXES: .cpp .o

 

SOURCE = main.cpp pub.cpp

OBJECT = $(SOURCE:.cpp=.o)

EXEC   = myapp

 

$(EXEC): $(OBJECT)

    $(CC) -o $(EXEC) $(OBJECT)

 

.cpp.o:

    $(CC) -I$(INCLUDE) $(CFLAGS) -o $@ -c $<

 

clean:

    -rm -rf $(OBJECT)

 

install: $(EXEC)

    @if [ -d $(INSTDIR) ] ; then \

        cp $(EXEC) $(INSTDIR) ; \

        chmod a+x $(INSTDIR)/$(EXEC) ; \

        chmod og-w $(INSTDIR)/$(EXEC) ; \

        echo "Installed in $(INSTDIR)" ; \

    else \

        echo "Sory, $(INSTDIR) does not exist." ; \

    fi


转载于:https://www.cnblogs.com/itrena/p/5927014.html

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/知新_RL/article/detail/641009
推荐阅读
相关标签
  

闽ICP备14008679号