2014-10-07 6 views
0

Хорошо, я полагаю, что префикс -D означает #define, за которым следует любое имя переменной, однако я не могу найти никакой документации по этой функции makefile для флагов компилятора.Что такое флаг -D-компилятора C++ (clang, GNU, MSVC)

CXX=clang -DTHISISPREPROCESSORVARIABLE

Так -DTHISISPREPROCESSORVARIABLE в процессе макияжа бы определить переменный препроцессор THISISPREPROCESSORVARIABLE и сделаю следовать cout скомпилировано.

#ifdef THISISPREPROCESSORVARIABLE 
    std::cout << "this should exist with the -D" << endl; 
#endif 

Это правильное предположение? Это, кажется, работает, только кто может подтвердить это -D имеет в виду #define (Кто-нибудь есть какие-либо ссылки на некоторые Makefile документы, которые могут заполнить все эти определения команд?)

+1

_ «Это правильное предположение?» _ Да, это так. Вы экспериментировали с ним? Получили ли вы какие-либо результаты, опровергающие ваше предположение? –

+1

Это опция компилятора, а не опция make. Поэтому вы должны посмотреть в документации компилятора. – rici

ответ

4

GCC, MSVC и Intel, у всех есть это флаг задокументирован, а Clang по умолчанию использует флаги GCC. Я просто нашел его на Clang's help page waaaay at the bottom (для clang-cl для windows), и harmic нашел это более ясно here для linux.

Выполнить clang-cl /?, чтобы увидеть список поддерживаемых опций:
/D <macro[=value]> Определить макрос

harmic отмечает, что это компилятор флаги, и не имеют ничего общего с Makefiles, поэтому вы не можете найти его в файлах makefile. Эти флаги могут быть помещены в make-файл, который передаст их компилятору, но не будет частью make-файлов.

+0

Спасибо, ссылка GCC именно то, что я искал! Да, похоже, что clang следует всем тем же стандартам. – Danoli3

+1

@ Danoli3: clang принимает все флаги GCC, которые я когда-либо пробовал, хотя он определенно игнорирует некоторые из них. –

+0

Также 'clang-cl' - это командная строка Windows, просто' clang --help' для систем на основе unix. – Danoli3

Смежные вопросы