Как узнать, использует ли make gcc или g ++ - PullRequest
2 голосов
/ 13 сентября 2010

Если я запускаю make, как я могу узнать, используются ли gcc или g ++? Я попытался взглянуть на Makefile, но ничего не нашел.

Вот вывод из make. Я не могу понять это также.

cd threads; make depend
make[1]: Entering directory `/home/anthony/nachos-4.0/code/threads'
g++ -I../lib -I../threads -I../machine -DTHREADS -Dx86 -DLINUX -DCHANGED -M ../lib/bitmap.cc ../lib/debug.cc ../lib/hash.cc ../lib/libtest.cc ../lib/list.cc ../lib/sysdep.cc ../machine/interrupt.cc ../machine/stats.cc ../machine/timer.cc ../threads/alarm.cc ../threads/kernel.cc ../threads/main.cc ../threads/scheduler.cc ../threads/synch.cc ../threads/synchlist.cc ../threads/thread.cc ../machine/elevatortest.cc ../machine/elevator.cc > makedep
In file included from ../lib/debug.h:18,
                 from ../lib/bitmap.cc:10:
../lib/sysdep.h:15:22: error: iostream.h: No such file or directory
In file included from ../lib/debug.h:18,
                 from ../lib/debug.cc:11:
../lib/sysdep.h:15:22: error: iostream.h: No such file or directory
In file included from ../lib/debug.h:18,
                 from ../lib/list.h:17,
                 from ../lib/libtest.cc:12:
../lib/sysdep.h:15:22: error: iostream.h: No such file or directory
In file included from ../lib/debug.h:18,
                 from ../lib/sysdep.cc:27:
../lib/sysdep.h:15:22: error: iostream.h: No such file or directory
In file included from ../lib/debug.h:18,
                 from ../lib/list.h:17,
                 from ../machine/interrupt.h:39,
                 from ../machine/interrupt.cc:24:
../lib/sysdep.h:15:22: error: iostream.h: No such file or directory
In file included from ../lib/debug.h:18,
                 from ../machine/stats.cc:11:
../lib/sysdep.h:15:22: error: iostream.h: No such file or directory
In file included from ../lib/debug.h:18,
                 from ../threads/main.h:13,
                 from ../machine/timer.cc:24:
../lib/sysdep.h:15:22: error: iostream.h: No such file or directory
In file included from ../lib/debug.h:18,
                 from ../threads/main.h:13,
                 from ../threads/alarm.cc:13:
../lib/sysdep.h:15:22: error: iostream.h: No such file or directory
In file included from ../lib/debug.h:18,
                 from ../threads/kernel.cc:9:
../lib/sysdep.h:15:22: error: iostream.h: No such file or directory
In file included from ../lib/debug.h:18,
                 from ../threads/main.h:13,
                 from ../threads/main.cc:21:
../lib/sysdep.h:15:22: error: iostream.h: No such file or directory
In file included from ../lib/debug.h:18,
                 from ../threads/scheduler.cc:22:
../lib/sysdep.h:15:22: error: iostream.h: No such file or directory
In file included from ../threads/thread.h:42,
                 from ../threads/synch.h:21,
                 from ../threads/synch.cc:36:
../lib/sysdep.h:15:22: error: iostream.h: No such file or directory
In file included from ../lib/debug.h:18,
                 from ../lib/list.h:17,
                 from ../threads/synchlist.h:14,
                 from ../threads/synchlist.cc:13:
../lib/sysdep.h:15:22: error: iostream.h: No such file or directory
In file included from ../threads/thread.h:42,
                 from ../threads/thread.cc:20:
../lib/sysdep.h:15:22: error: iostream.h: No such file or directory
In file included from ../lib/debug.h:18,
                 from ../lib/list.h:17,
                 from ../machine/elevator.h:24,
                 from ../machine/elevatortest.cc:13:
../lib/sysdep.h:15:22: error: iostream.h: No such file or directory
In file included from ../lib/debug.h:18,
                 from ../lib/list.h:17,
                 from ../machine/elevator.h:24,
                 from ../machine/elevator.cc:11:
../lib/sysdep.h:15:22: error: iostream.h: No such file or directory
make[1]: *** [depend] Error 1
make[1]: Leaving directory `/home/anthony/nachos-4.0/code/threads'
make: *** [all] Error 2

1 Ответ

1 голос
/ 13 сентября 2010

Make должен выплевывать командные строки, в которых он запущен. Они должны сказать вам, какой компилятор он вызывает.

И с тех пор, как вы их опубликовали, теперь ясно, что make звонит g++. Кроме того, файлы g++ заканчиваются компиляцией в .cc, поэтому код во внешнем интерфейсе g++, который вызывает компилятор C для файлов .c, не будет активирован.

Могу поспорить, что вас смущает тот факт, что iostream.h не может быть найден. По разным странным причинам комитет по стандартам решил опустить .h в именах стандартных заголовочных файлов. Большинство компиляторов все еще поддерживали использование .h в течение некоторого времени после этого, чтобы избежать взлома старого кода. Но это было исключено в последние несколько лет, отчасти потому, что почти все программы, которые включают .h версию файла заголовка, также не ожидают, что символы будут находиться в пространстве имен ::std.

Кроме того, большинство людей перестали использовать расширение .cc для C ++ (мне это очень грустно, мне понравилось). В совокупности эти вещи говорят мне, что вы пытаетесь скомпилировать код, написанный для старых компиляторов C ++, предшествующих стандартам, и который никогда не обновлялся. Если вы хотите, чтобы код компилировался, у вас впереди немного усилий по переносу.

Первый шаг в вашем процессе переноса - заменить #include <iostream.h> на #include <iostream>. Также включает в себя стандартные заголовки библиотеки C, такие как stdlib.h, должны быть заменены включениями версий C ++, такими как cstdlib.

Но и этого будет больше. Код, скорее всего, ожидает, что такие вещи, как cerr и cout будут в пространстве имен корневого уровня, а в стандартах C ++ они есть в пространстве имен ::std. Вам нужно будет исправить код, чтобы использовать это пространство имен.

К счастью, все эти вещи, вероятно, приведут к ошибкам компилятора из-за отсутствия включаемых файлов или символов, которые он не может найти, так что это не будет слишком сложно.

Я только что посмотрел библиотеку nachos , которую вы пытаетесь скомпилировать, и она действительно очень старая и не обновлялась в течение очень долгого времени. Компилятор, который они упоминают, это gcc 2.6, который является абсолютно древним компилятором.

...