代码之家  ›  专栏  ›  技术社区  ›  KcFnMi

构建main.c和main.cpp的单个makefile

  •  0
  • KcFnMi  · 技术社区  · 6 年前

    我想 make main-c 建造 main-c main.c .

    make main-cpp 建造 main-cpp main.cpp .

    我在同一个文件夹中:

    主C :

    #include <stdio.h>
    
    int main(int argc, char const *argv[]) {
        printf("This ic C\n");
    }
    

    主.cpp :

    #include <iostream>
    
    int main(int argc, char const *argv[]) {
        std::cout << "This is C++" << std::endl;
    }
    

    Makefile :

    CFLAGS   = -std=gnu11
    
    CXXFLAGS = -std=gnu++11 
    
    CPPFLAGS = -g -Wall -O3
    LDFLAGS  = 
    LDLIBS   =  
    OBJS     = main.o 
    
    APP-C    = main-c
    APP-CPP  = main-cpp
    
    default:
        echo "Check README.txt"
    
    main-c: $(OBJS)
        $(CC) $^ $(LDLIBS) -o $@
    
    main-cpp: $(OBJS)
        $(CXX) $^ $(LDLIBS) -o $@
    
    clean:
        -rm -Rf *.o 
    
    distclean: clean
        -rm -Rf $(APP-C) $(APP-CPP) 
    

    所以:

    $ make main-c
    cc -std=gnu11 -g -Wall -O3  -c -o main.o main.c
    cc main.o  -o main-c
    

    但是(也是从 .c ):

    $ make main-cpp
    cc -std=gnu11 -g -Wall -O3  -c -o main.o main.c
    c++ main.o  -o main-cpp
    

    我在等你 制造主CPP 使用 $(CXX) $^ $(LDLIBS) -o $@ 从…开始建造 .cpp . 我错过了什么?

    2 回复  |  直到 6 年前
        1
  •  1
  •   spinkus    6 年前

    make main-cpp --debug

    main.o main-cpp main-c make-cpp

    CFLAGS   = -std=gnu11
    CXXFLAGS = -std=gnu++11 
    CPPFLAGS = -g -Wall -O3
    LDFLAGS  = 
    LDLIBS   =  
    APP-C   = main-c
    APP-CPP  = main-cpp
    
    default:
        echo "Check README.txt"
    
    main-c: %:%.o
        $(CC) $^ $(LDLIBS) -o $@
    
    main-cpp: %:%.o
        $(CXX) $^ $(LDLIBS) -o $@
    
    main-cpp.o: main.cpp
        $(CXX) $(CPPFLAGS) $(CXXFLAGS) -c $? -o $@
    
    main-c.o: main.c
        $(CC) $(CPPFLAGS) $(CFLAGS) -c $? -o $@
    
    clean:
        -rm -Rf *.o 
    
    distclean: clean
        -rm -Rf $(APP-C) $(APP-CPP)
    
        2
  •  0
  •   kmdreko    6 年前

    main-c main-cpp main.o

    make's implicit object file creation main.c main.cpp