Как определить, поддерживает ли компилятор <iostream>vs <iostream.h> - PullRequest
0 голосов
/ 16 декабря 2011

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

Я ищу способ надежно и точно определить, поддерживает ли целевой компилятор заголовочные файлы с расширением .h или без него. Мне также необходимо определить, поддерживаются ли пространства имен. Обе эти потребности могут или не могут быть возможны.

Немного предыстории: Утилита является расширением языка Inline :: CPP для Perl. Расширение автоматически включает <iostream> и пытается правильно угадать, требуется ли «.h» или нет (и, конечно, поддерживает ли компилятор пространства имен). Но это далеко от совершенства в этом отношении, и эта проблема уменьшает широту полезности утилиты.

Итак, еще раз повторю вопрос: как мне определить, поддерживает ли компилятор стандартные заголовки, такие как <iostream>, или стандартные заголовки, такие как <iostream.h>?

Ответы [ 2 ]

5 голосов
/ 16 декабря 2011

Не в коде, а в системе сборки / настройки.Например, в CMake вы можете использовать try_compile и предоставить ему пример файла.

...
try_compile(PRE_STANDARD_HEADERS tmp_builds pre_standard_headers_test.cpp)
if ( ${PRE_STANDARD_HEADERS} )
    add_definitions( -D PRE_STANDARD_HEADERS )
endif()

Вам нужно сделать этот pre_standard_headers_test.cpp .. просто простой скомпилированный exe, который #включаютнапример.

Тогда в вашем обычном коде просто

#ifdef PRE_STANDARD_HEADERS

сделает трюк.

1 голос
/ 16 декабря 2011

Стандартный подход для Linux и других Unix-дружественных платформ заключается в использовании скрипта конфигурации .В качестве выходных данных сценарий сгенерирует Makefile и файл заголовка config.h, который включает или отключает любые функции компилятора, на которые может опираться ваш код, когда он будет доступен.

Для Windows ожидается, что вы предоставитефайлы решений и проектов для Visual Studio с предварительно созданным заголовочным файлом config.h.

...