Использование Clang ++ в Makefile вместо G ++ - PullRequest
5 голосов
/ 16 марта 2012

У меня есть make-файл, который прекрасно строит мой проект с g ++ 4.6.

#specify the compiler  
GXX=g++ -std=c++0x

# Specifiy the target  
all: linkedList

# Specify the object files that the target depends on  
# Also specify the object files needed to create the executable  
linkedList: StudentRecord.o Node.o LinkedList.o  ListMain.o
    $(GXX) StudentRecord.o Node.o LinkedList.o  ListMain.o -o linkedList

# Specify how the object files should be created from source files  
LinkedList.o: LinkedList.cpp
    $(GXX)  -c  LinkedList.cpp

ListMain.o: ListMain.cpp
    $(GXX)  -c  ListMain.cpp

StudentRecord.o: StudentRecord.cpp
    $(GXX)  -c  StudentRecord.cpp

Node.o: Node.cpp
    $(GXX)  -c  Node.cpp

Когда я изменяю первую строку на GXX = clang++ -std=c++0x, clang выдает довольно плотную ошибку о том, что iostream не находит правильные аргументы или что-то в этом роде, а также о многих других ошибках после этого (но это ошибка root).

In file included from /usr/include/c++/4.6/iostream:39:
In file included from /usr/include/c++/4.6/ostream:39:
In file included from /usr/include/c++/4.6/ios:40:
In file included from /usr/include/c++/4.6/bits/char_traits.h:40:
In file included from /usr/include/c++/4.6/bits/stl_algobase.h:65:
In file included from /usr/include/c++/4.6/bits/stl_pair.h:60:
In file included from /usr/include/c++/4.6/bits/move.h:53:
/usr/include/c++/4.6/type_traits:630:59: error: '_Tp' does not refer to a value
    : public integral_constant<bool, __is_standard_layout(_Tp)>

Это проблема с моим make-файлом, или действительно ли может быть разница в этой простой компиляции?

Использование clang 2.9.

Примечание: Строка, на которую жалуется кланг: #include <iostream>

Ответы [ 2 ]

2 голосов
/ 31 августа 2013

Это старый вопрос, но в случае, если кто-то здесь оступится, нужно проверить, используете ли вы clang std lib.Для этого вам нужен флаг:

-stdlib=libc++
0 голосов
/ 22 ноября 2012

Если вы используете OS X Lion (10.7) или Mountain Lion (10.8), используйте «c ++» (/ usr / bin / c ++) вместо прямого «clang ++».Несмотря на то, что одна из них является символической ссылкой на другую, в clang есть некоторые умные возможности для установки правильных путей и параметров компилятора, чтобы сделать больше того, что вы ожидаете при использовании c ++.

...