LINUX.ORG.RU

Задать флаги и опции gcc «глобально» в обход Cmake и прочих

 gcc cmake options


0

2

Вот собственно вопрос - как задать опции для gcc чтобы они были более приоритетны чем порождения CMake ?

и откуда что пошло : собирается довольно много всего (много пакетов), gcc 14.2.1; Некоторые пакеты строятся через cmake, некоторые классическим configure, у каких-то просто makefile

14-й видимо имеет более строгие умолчания и всё валится c -Wincompatible-pointer-type и подобных. В 13 и 12 версиях всё собирается и работает влёт.

Цели патчить каждый пакет нет. Есть цель их собрать 14-м компилятором. То есть хочется как-то скормить ему -Wnoincompatible-pointer-type и подобные флаги..

иначе подобное:

/usr/include/pipewire-0.3/pipewire/node.h:208:58: замечание: ожидался тип «struct pw_node *», но аргумент имеет тип «struct pw_proxy *»
всё выбивает. Хотя для С это нормальный код и там всё правильно, разве что типы принудительно не приведены.

★★★★★

Можно через https://gcc.gnu.org/onlinedocs/gcc/Spec-Files.html грабить корованы, переписывать любые флаги достаточно гибко (если хорошо накуриться мануалов). Хотя в твоём случае варнингов наверное можно придумать что-то проще.

snizovtsev ★★★★★
()

14-й видимо имеет более строгие умолчания и всё валится c -Wincompatible-pointer-type и подобных. В 13 и 12 версиях всё собирается и работает влёт.

Вообще традиционно в automake такие проблемы решались заведением флага сборки «./configure –enable-maintainer-mode» в апстриме. Если его нет, то разработчики дистра допиливали билд систему и отправляли патч. Смысл в том, что «-Werror» включается только для тех кто пилит код (maintainer), а для пользователей выключается.

Вот пример из mysql для cmake: https://sources.debian.org/src/mariadb-10.0/10.0.32-0%2Bdeb8u1/cmake/maintainer.cmake/

snizovtsev ★★★★★
()
Последнее исправление: snizovtsev (всего исправлений: 3)
Ответ на: комментарий от snizovtsev

Можно через https://gcc.gnu.org/onlinedocs/gcc/Spec-Files.html грабить корованы

Спасибо ! РЕШЕНО.

----

Может кому пригодиться, для сборки Tcl/Tk Bawt 3.1.0 https://www.tcl3d.org/bawt/index.html gcc 14.2 в arch-linux

надо убрать из сборки mawt (это пакет про видео, там действительно есть ошибки и конфликты) и использовать следующие заклининания:

build.spec файл :

%rename cc1 old_cc1
*cc1:
-Wno-error=incompatible-pointer-types,implicit-function-declaration,deprecated-declarations,discarded-qualifiers %(old_cc1)

%rename cc1plus old_cc1plus
*cc1plus:
-Wno-error=incompatible-pointer-types,implicit-function-declaration,deprecated-declarations,discarded-qualifiers %(old_cc1plus)

и сборка build.sh:

#!/bin/sh
export CFLAGS="-Wno-incompatible-pointer-types -Wno-implicit-function-declaration -Wno-deprecated-declarations -Wno-discarded-qualifiers"
export CC=gcc --spec=$HOME/dist/build.spec
. ./Build-Linux.sh intel 64 Setup/Tcl_Extended.bawt update all
по отдельности CFLAGS и указания spec действуют на сборку разных пакетов по разному, но совместо вроде как всё пролечиваетсяпаке

и (side-эффект локализаций gcc -v , gcc --version) чуть-чуть патчить Bawt.tcl - можно прямо в начало процедуры GetGccCompilerVersion поставить return «14.2.1» ; или заранее переключить локаль в C.

MKuznetsov ★★★★★
() автор топика

Цели патчить каждый пакет нет. Есть цель их собрать 14-м компилятором. То есть хочется как-то скормить ему -Wnoincompatible-pointer-type и подобные флаги..

Не делай так.

LongLiveUbuntu ★★★★★
()