Как добавить флаг «std=c99» в cc при компиляции с использованием груза?

Я пытаюсь установить ripgrep (ссылка на репо) с функцией pcre2 из исходного кода. Для этого я запускаю команду cargo build --release --feature 'pcre2' для сборки exec.

При этом груз пытается собрать несколько файлов C, выдает error: ‘for’ loop initial declarations are only allowed in C99 mode, а также note: use option -std=c99 or -std=gnu99 to compile your code и останавливается.

Команда, которую он запускает, — cc -O3 -ffunction-sections -fdata-sections -fPIC -gdwarf-4 [more args...] -o <path-to>-pcre2_script_run.o -c upstream/src/pcre2_script_run.c.

Я пробовал использовать псевдоним cc для разных компиляторов, но это не дало эффекта. Как я могу указать флаг cc (в данном случае std=c99), чтобы я мог скомпилировать этот проект?

Сможете ли вы создать новый проект с зависимостью pcre2-sys или получите ту же ошибку?

Cerberus 22.07.2024 11:37

Выполнение cargo new foo ; cd foo ; cargo add pcre2-sys ; cargo build вызывает ту же ошибку.

m.raynal 22.07.2024 11:47

Какую ОС вы используете? Какая у вас версия gcc/clang?

Chayim Friedman 22.07.2024 15:58

Я использую CentOS 7 как пользователь без полномочий root. На нем существует бесчисленное множество версий gcc и clang, включая недавние, честно говоря, я не знаю, какой из них является псевдонимом cc. Я попробовал изменить псевдонимы cc, но, к сожалению, это не дало никакого эффекта.

m.raynal 23.07.2024 08:50
Почему Python в конце концов умрет
Почему Python в конце концов умрет
Последние 20 лет были действительно хорошими для Python. Он прошел путь от "просто языка сценариев" до основного языка, используемого для написания...
0
4
50
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

pcre2-sys (от которого зависит ripgrep) действительно не компилируется на CentOS.

Исправление, предложенное в этой проблеме, заключается в использовании export CC=c99, поскольку крейт cc (который pcre2-sys использует для компиляции PCRE) использует эту переменную среды, если она определена, для выбора компилятора C.

Он не работал с CC=c99, потому что тогда возникла другая проблема (опция -gwarf-4 не распознавалась), но это поставило меня на правильный путь (я использовал псевдоним вместо установки переменной env). Мой CC был установлен на gcc. Используя CC=clang cargo build ..., я смог создать ripgrep с нужной функцией, большое спасибо. Возможно, отредактируйте свое сообщение для тех, кто будет искать правильный ответ. Использование clang версии 17.0.6.

m.raynal 23.07.2024 10:57

Другие вопросы по теме