How to include clean target in Makefile?

后端 未结 3 775
面向向阳花
面向向阳花 2020-12-29 05:02

I have a Makefile that looks like this

CXX = g++ -O2 -Wall

all: code1 code2

code1: code1.cc utilities.cc
   $(CXX) $^ -o $@

code2: code2.cc utilities.cc
          


        
相关标签:
3条回答
  • 2020-12-29 05:40

    The best thing is probably to create a variable that holds your binaries:

    binaries=code1 code2
    

    Then use that in the all-target, to avoid repeating:

    all: clean $(binaries)
    

    Now, you can use this with the clean-target, too, and just add some globs to catch object files and stuff:

    .PHONY: clean
    
    clean:
        rm -f $(binaries) *.o
    

    Note use of the .PHONY to make clean a pseudo-target. This is a GNU make feature, so if you need to be portable to other make implementations, don't use it.

    0 讨论(0)
  • 2020-12-29 05:43

    In makefile language $@ means "name of the target", so rm -f $@ translates to rm -f clean.

    You need to specify to rm what exactly you want to delete, like rm -f *.o code1 code2

    0 讨论(0)
  • 2020-12-29 05:44

    By the way it is written, clean rule is invoked only if it is explicitly called:

    make clean

    I think it is better, than make clean every time. If you want to do this by your way, try this:

    CXX = g++ -O2 -Wall
    
    all: clean code1 code2
    
    code1: code1.cc utilities.cc
       $(CXX) $^ -o $@
    
    code2: code2.cc utilities.cc
       $(CXX) $^ -o $@
    
    clean: 
        rm ...
        echo Clean done
    
    0 讨论(0)
提交回复
热议问题