无法创建有效的makefile。什么都不懂

时间:2013-12-17 21:10:41

标签: makefile

我假设大多数人都认为我没有尝试自己搜索互联网,但我确实这样做了。我对makefile一无所知,我试图为c ++创建一个。 我只有两个文件:Set.hpp和main.cpp。

这是我错误的makefile。

CC=g++
CFLAGS= --std=c++0x --pedantic -g -Wall -W
LDFLAGS= 
EXEC=main

all: $(EXEC)

main: Set.o main.o
        $(CC) -o main Set.o main.o $(LDFLAGS)

main.o: main.cpp
        $(CC) -o main.o -c main.cpp $(CFLAGS)

Set.o: Set.hpp
    $(CC) -o Set.o -c Set.hpp $(CFLAGS)

clean:
    rm -rf *.o

mrproper: clean
    rm -rf $(EXEC)

我得到的错误只是Make: * no targets. Stop.。我真的需要这方面的帮助:/提前谢谢你:)

1 个答案:

答案 0 :(得分:0)

.hpp个文件是头文件。他们不被遵守。它们将包含在源文件中。您可以找到有关.hpp文件和一些相关信息here的更多信息。

现在,从makefile的“工作”版本开始,让我们考虑以下几点。我假设你有两个源文件

 1. main.cpp
 2. Set.cpp

和一个头文件

 1. Set.hpp

在同一目录中。请考虑下面提供的示例文件。

的main.cpp

#include <iostream>
#include "Set.hpp"
using namespace std;

int main()
{
        call_func();
        cout <<"And this is from main.cpp"<<endl<<endl;
        return 0;
}

Set.cpp

#include <iostream>
#include "Set.hpp"
using namespace std;

int call_func()
{
        cout<<"This is from set.cpp"<<endl<<endl;
        return 0;
}

Set.hpp

#include <iostream>
using namespace std;

int call_func();

生成文件

CC=g++
CFLAGS= --std=c++0x --pedantic -g -Wall -W
LDFLAGS=
EXEC=main

all: $(EXEC)

main: Set.o main.o
        $(CC) -o main Set.o main.o $(LDFLAGS)

main.o: main.cpp
        $(CC) -o main.o -c main.cpp $(CFLAGS)

Set.o: Set.cpp                                  # notice the change from .hpp to .cpp
        $(CC) -o Set.o -c Set.cpp $(CFLAGS)     # notice the change

clean:
        rm -rf *.o

mrproper: clean
        rm -rf $(EXEC)

之后,输出就像

[sourav@infba01383 so_overflow]# make
g++ -o Set.o -c Set.cpp --std=c++0x --pedantic -g -Wall -W
g++ -o main.o -c main.cpp --std=c++0x --pedantic -g -Wall -W
g++ -o main Set.o main.o 
[sourav@infba01383 so_overflow]# make 
make: Nothing to be done for `all'.
[sourav@infba01383 so_overflow]# make clean
rm -rf *.o
[sourav@infba01383 so_overflow]#

希望这有帮助!!!