2015-12-18 3 views
1

В нашем C проект, который управляется Autotools мы имеем следующее (высокий уровень) структуру каталогов:Autotools: флаги для конкретного подкаталог

<project> 
+--- configure.ac 1024 bytes 
+--- Makefile.am  1024 bytes 
+--- include   <DIR> 
    +--- Makefile.am 1023 bytes 
+---source   <DIR> 
    +--- Makefile.am 1022 bytes 
+--- 3rdparty  <DIR> 
    +--- Makefile.am 1021 bytes 

Каталог 3rdparty содержит исходный код, который не написанный нами, но независимо от того, компилируется и привязана к основному приложению. К сожалению, этот каталог содержит много предупреждений о времени компиляции, которые мы не хотим исправлять.

Как отключить предупреждения (с флагом -w) для всех исходных файлов в 3rdparty и его подкаталогах?

+0

Кто является автором '3rdparty/Makefile.am'? К какому проекту это принадлежит? – rubicks

+0

@rubicks у него просто есть запись 'SUBDIRS' для многих других поддиректорий, в которых хранятся различные библиотеки. Некоторые из них написаны нашими коллегами, другие - другими разработчиками. – fritzone

+0

, что на самом деле не отвечает на мой вопрос. Независимо от того, если вы владеете '3rdparty/Makefile.am', добавьте необходимые флаги' -Wno-something' в 'AM_CFLAGS' в этом файле. Если ваш проект не владеет '3rdparty/Makefile.am', то либо его паттируйте, либо добавьте исправленную версию в ваш проект. – rubicks

ответ

1

@fritzone, чтобы отключить предупреждения в стороннем проекте, сложно. Для того, чтобы игнорировать эти предупреждения при использовании гораздо более строгие компилятора флаги в собственном проекте можно сделать так:

https://github.com/rubicks/autotool-subdirs

tldr; 3rdparty/Makefile.am использует предупреждения по умолчанию; src/Makefile.am использует действительно строгие предупреждения (рассматриваются как ошибки) и использует -isystem (вместо -I), чтобы добавить путь включения 3rdparty.

Проект должен выглядеть знакомым:

. 
├── 3rdparty 
│   ├── Makefile.am 
│   ├── third.c 
│   └── third.h 
├── Makefile.am 
├── autosub-top.h 
├── configure.ac 
├── include 
│   ├── Makefile.am 
│   └── autosub.h 
└── src 
   ├── Makefile.am 
   ├── autosub.c 
   └── prog.c 

3rdparty/third.h содержит предупредит-состоянии вещи, как

static const size_t answer = -42; 

, который включен по src/autosub.c. src/Makefile.am компилирует src/autosub.c с

AM_CFLAGS =  \ 
    -Wall   \ 
    -Wconversion  \ 
    -Werror   \ 
    -Wextra   \ 
    -pedantic-errors \ 
    -std=c99 

и ссылки в libthird.la

+0

Спасибо! Это дает очень хорошие идеи для дальнейших шагов! – fritzone

+0

Добро пожаловать; Я рад помочь. – rubicks