Кажется абсурдным, что об этом не было бы вопроса, но я не могу его найти. Во всяком случае, я пишу make-файл, и я просто хочу иметь условный оператор, который устанавливает разные CFLAGS в зависимости от того, используются ли компиляторы GNU или Intel для компиляции программы, заданной переменной CC envrionment.Makefile: изменить флаги компилятора на основе значений CC/CXX/FC
Теперь, есть раздел в ГНУ сделать руководство по этому вопросу, и он говорит, что сделать что-то вроде следующего:
https://ftp.gnu.org/old-gnu/Manuals/make-3.79.1/html_chapter/make_7.html
ifeq ($(CC),gcc)
libs=$(libs_for_gcc)
else
libs=$(normal_libs)
endif
(ок настройки библиотеки не флаги, но независимо от того, та же идея). Хорошо, но это, конечно, пример того, как работают условные выражения, потому что на практике это, очевидно, глупый способ сделать это. Переменная CC может содержать всевозможные вещи, помимо «gcc» и по-прежнему эффективно использовать компилятор GNU C. Даже просто указание абсолютного пути к компилятору в CC приведет к нарушению этого примера.
Так какой же разумный, надежный способ сделать это? Кроме того, если это имеет значение, я хочу сделать то же самое и для компиляторов C++ и Fortran.
самый разумный и надежный способ (ИМХО) это использовать Makefile компилятор, такие как CMake для генерации Makefile для вас. CMake (и другие) знают о различных платформах и наборах инструментов. –
Однако даже с CMake, если вы хотите установить дополнительные флаги компилятора (или разные библиотеки и т. Д.) В зависимости от компилятора, вам все равно необходимо обнаружить компилятор (обычно в соответствии с CMAKE_CXX_COMPILER_ID). Таким образом, вы все равно не сможете полностью избавиться от обнаружения компилятора (например, если вы хотите принудительно «-Wall -Wextra -Werror» с GCC/CLang, которые другие компиляторы могут не распознать). Но, вернее, я также предпочитаю использовать CMake, если у меня есть опция. – axalis
Yeah CMake определенно лучше, однако я действительно имею дело с некоторым устаревшим кодом, и я просто хочу исправить существующий make-файл, чтобы он не так легко сломался. –