Howto: условное включение заголовочного файла - PullRequest
1 голос
/ 26 февраля 2012

У меня есть test.c, в котором я хотел бы получить оператор

#include "abc.h" (файл заголовка libabc)

только если test.c был скомпилирован с libabc как:

gcc test.c -labc

Если test.c просто скомпилирован как

gcc test.c, abc.h включать не следует.

Как можноЯ так делаю?

Ответы [ 2 ]

3 голосов
/ 26 февраля 2012

Один из подходов заключается в использовании -D для определения макроса:

gcc test.c -labc -DABC

#ifdef ABC
#include "abc.h"
#endif

Если вы запускаете эту команду из Bash, то в принципе вы можете создать оболочку функции оболочки вокруг gccдля автоматического добавления -DABC, когда указано -labc:

function gcc ()
{
    local arg
    for arg in "$@" ; do
        if [[ $arg = -labc ]] ; then
            command gcc "$@" -DABC
            return
        fi
    done
    command gcc "$@"
}

.,,но я не очень рекомендую это.

1 голос
/ 26 февраля 2012

Вряд ли, так как фаза соединения происходит после завершения компиляции.Вы можете настроить Makefile для определения макроса препроцессора и использовать его в качестве условия тестирования.Я не могу думать ни о каком другом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...