Проблемы компиляции проекта C ++ с использованием makefile

0

У меня возникла проблема с компиляцией моего CS hw с помощью make файла. Он будет компилироваться в CodeBlocks, но не с gcc...

→ Файлы находятся здесь... https://github.com/ericmwalsh/cppSortedList



Файлы...

SortedList.h

SortedList.cpp (включает SortedList.h)

PCTimer.h

fileListFunctions.cpp (включает PCTimer.h и SortedList.cpp)

testSortedList.cpp (включает fileListFunctions.cpp)



Теперь я знаю, что я не должен включать файлы cpp друг в друга, но по какой-то причине я не могу использовать свой make файл:

testmake: SortedList.cpp fileListFunctions.cpp testSortedList.cpp
gcc -o testmake SortedList.cpp fileListFunctions.cpp testSortedList.cpp -I.



Ошибка, которую я получаю, выглядит следующим образом:

gcc -o testmake SortedList.cpp fileListFunctions.cpp testSortedList.cpp -I.
In file included from SortedList.cpp:9:
./SortedList.h:41:17: warning: in-class initialization of non-static data member is a C++11 extension [-Wc++11-extensions]
    int capacity=45500, size=0;
                ^
./SortedList.h:41:29: warning: in-class initialization of non-static data member is a C++11 extension [-Wc++11-extensions]
    int capacity=45500, size=0;
                            ^
SortedList.cpp:138:1: warning: control may reach end of non-void function [-Wreturn-type]
}
^
3 warnings generated.
In file included from fileListFunctions.cpp:10:
./PCTimer.h:32:9: error: use of undeclared identifier 'cerr'
        cerr << "attempt to start an already running stopwatch" << endl;
        ^
./PCTimer.h:32:68: error: use of undeclared identifier 'endl'
        cerr << "attempt to start an already running stopwatch" << endl;
                                                                   ^
./PCTimer.h:43:9: error: use of undeclared identifier 'cerr'
        cerr << "attempt to stop a non-running stopwatch" << endl;
        ^
./PCTimer.h:43:62: error: use of undeclared identifier 'endl'
        cerr << "attempt to stop a non-running stopwatch" << endl;
                                                             ^
fileListFunctions.cpp:12:38: error: unknown type name 'SortedArrayList'
void insertAllWords(char * fileName, SortedArrayList * inp){
                                     ^
fileListFunctions.cpp:15:5: error: use of undeclared identifier 'std'
    std::ifstream infile(fileName);
    ^
fileListFunctions.cpp:16:10: error: use of undeclared identifier 'std'
    for( std::string line; getline( infile, line ); ){
         ^
fileListFunctions.cpp:16:37: error: use of undeclared identifier 'infile'
    for( std::string line; getline( infile, line ); ){
                                    ^
fileListFunctions.cpp:18:9: error: use of undeclared identifier 'std'
        std::transform(line.begin(), line.end(), line.begin(), ::tolower);
        ^
fileListFunctions.cpp:21:5: error: use of undeclared identifier 'infile'
    infile.close();
    ^
fileListFunctions.cpp:23:5: error: use of undeclared identifier 'cout'
    cout << "SortedArrayList: Time to insertAllWords from " << fileName << ": " << t.elapsedTime() << " secs" << endl;
    ^
fileListFunctions.cpp:23:114: error: use of undeclared identifier 'endl'
    cout << "SortedArrayList: Time to insertAllWords from " << fileName << ": " << t.elapsedTime() << " secs" << endl;
                                                                                                                 ^
fileListFunctions.cpp:25:36: error: unknown type name 'SortedArrayList'
bool findAllWords(char * fileName, SortedArrayList * inp){
                                   ^
fileListFunctions.cpp:28:5: error: use of undeclared identifier 'std'
    std::ifstream infile(fileName);
    ^
fileListFunctions.cpp:29:10: error: use of undeclared identifier 'std'
    for( std::string line; getline( infile, line ); ){
         ^
fileListFunctions.cpp:29:37: error: use of undeclared identifier 'infile'
    for( std::string line; getline( infile, line ); ){
                                    ^
fileListFunctions.cpp:31:9: error: use of undeclared identifier 'std'
        std::transform(line.begin(), line.end(), line.begin(), ::tolower);
        ^
fileListFunctions.cpp:34:5: error: use of undeclared identifier 'infile'
    infile.close();
    ^
fileListFunctions.cpp:36:5: error: use of undeclared identifier 'cout'
    cout << "SortedArrayList: Time to findAllWords from " << fileName << ": " << t.elapsedTime() << " secs" << endl;
    ^
fatal error: too many errors emitted, stopping now [-ferror-limit=]
20 errors generated.
testSortedList.cpp:12:5: error: unknown type name 'SortedArrayList'
    SortedArrayList * a = new SortedArrayList();
    ^
testSortedList.cpp:12:31: error: unknown type name 'SortedArrayList'
    SortedArrayList * a = new SortedArrayList();
                              ^
testSortedList.cpp:22:5: error: use of undeclared identifier 'cout'
    cout << endl << "AFTER REMOVALS:" << endl << endl;
    ^
testSortedList.cpp:22:13: error: use of undeclared identifier 'endl'
    cout << endl << "AFTER REMOVALS:" << endl << endl;
            ^
testSortedList.cpp:22:42: error: use of undeclared identifier 'endl'
    cout << endl << "AFTER REMOVALS:" << endl << endl;
                                         ^
testSortedList.cpp:22:50: error: use of undeclared identifier 'endl'
    cout << endl << "AFTER REMOVALS:" << endl << endl;
                                                 ^
testSortedList.cpp:34:5: error: use of undeclared identifier 'cout'
    cout << endl << "AFTER INSERTS:" << endl << endl;
    ^
testSortedList.cpp:34:13: error: use of undeclared identifier 'endl'
    cout << endl << "AFTER INSERTS:" << endl << endl;
            ^
testSortedList.cpp:34:41: error: use of undeclared identifier 'endl'
    cout << endl << "AFTER INSERTS:" << endl << endl;
                                        ^
testSortedList.cpp:34:49: error: use of undeclared identifier 'endl'
    cout << endl << "AFTER INSERTS:" << endl << endl;
                                                ^
testSortedList.cpp:39:5: error: unknown type name 'SortedLinkedList'
    SortedLinkedList * a = new SortedLinkedList();
    ^
testSortedList.cpp:39:32: error: unknown type name 'SortedLinkedList'
    SortedLinkedList * a = new SortedLinkedList();
                               ^
testSortedList.cpp:49:5: error: use of undeclared identifier 'cout'
    cout << endl << endl << "REMOVED AFTER THIS :" << endl << endl;
    ^
testSortedList.cpp:49:13: error: use of undeclared identifier 'endl'
    cout << endl << endl << "REMOVED AFTER THIS :" << endl << endl;
            ^
testSortedList.cpp:49:21: error: use of undeclared identifier 'endl'
    cout << endl << endl << "REMOVED AFTER THIS :" << endl << endl;
                    ^
testSortedList.cpp:49:55: error: use of undeclared identifier 'endl'
    cout << endl << endl << "REMOVED AFTER THIS :" << endl << endl;
                                                      ^
testSortedList.cpp:49:63: error: use of undeclared identifier 'endl'
    cout << endl << endl << "REMOVED AFTER THIS :" << endl << endl;
                                                              ^
testSortedList.cpp:57:5: error: use of undeclared identifier 'cout'
    cout << "Beginning the testing with SortedArrayList..." << endl << endl;
    ^
testSortedList.cpp:57:64: error: use of undeclared identifier 'endl'
    cout << "Beginning the testing with SortedArrayList..." << endl << endl;
                                                               ^
fatal error: too many errors emitted, stopping now [-ferror-limit=]
20 errors generated.
make: *** [testmake] Error 1
  • 0
    Почему вы включаете исходные файлы в исходные файлы? Это не то, как вы используете несколько исходных файлов. Вы компилируете каждый исходный файл в объектные файлы, а затем связываете их вместе.
  • 0
    Вам нужно скомпилировать в режиме C ++ 11 с флагом std=c++11 . Затем вам нужно добавить префикс std lib к std:: .
Показать ещё 2 комментария
Теги:
makefile
gcc

1 ответ

1
Лучший ответ

Сначала необходимо скомпилировать все зависимые файлы (.cpp) в объекты (.o). И свяжите его с конечным объектом (main.o) чтобы сформировать исполняемый файл.

Посмотрите, как сделать SIMPLE C++ Makefile? ,

Это будет работать,

#Declaration and Definition of Macros which are used in make 
CPP  = g++
OBJ = SortedList.o fileListFunctions.o testSortedList.o
INCS = -I"include" -I"include" -I"." 
BIN=testmake
CXXFLAGS=$(INCS) -O3 -Wall
RM = rm -f

.PHONY: all all-before all-after clean clean-custom

all: all-before $(BIN) all-after

clean: clean-custom
    ${RM} $(OBJ) $(BIN)

$(BIN): $(OBJ)
    $(CPP) $(OBJ) -o $(BIN) $(LIBS)

SortedList.o: SortedList.cpp
    $(CPP) -c SortedList.cpp -o $@ $(CXXFLAGS)

fileListFunctions.o: fileListFunctions.cpp
    $(CPP) -c fileListFunctions.cpp -o $@ $(CXXFLAGS)

testSortedList.o: testSortedList.cpp
    $(CPP) -c testSortedList.cpp -o $@ $(CXXFLAGS)
  • 0
    testmake: SortedList.cpp fileListFunctions.cpp testSortedList.cpp g ++ -o testmake SortedList.cpp fileListFunctions.cpp testSortedList.cpp -I.
  • 0
    если вы извлекаете связанный с ним репозиторий, я только что обновил код до того, с чем я сейчас работаю ^ редактируется вышеприведенная версия (я изменил gcc на g ++)
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню