Можно ли определить макрос C в make-файле? - PullRequest
25 голосов
/ 14 марта 2011

Можно ли поместить эквивалент #define VAR (в программе на C) в make-файл, чтобы можно было контролировать, какая часть программы должна быть скомпилирована?

Ответы [ 3 ]

21 голосов
/ 14 марта 2011

В соответствии с cc справочной страницей на linux

-D name=definition
           The contents of definition are tokenized and processed as if they appeared during translation phase three in a #define directive.  In
           particular, the definition will be truncated by embedded newline characters.
12 голосов
/ 14 марта 2011

Отредактируйте Makefile, чтобы показать

CFLAGS = -D VAR1 -D VAR2 = * что-то *

Если вы используете правила по умолчанию в Makefile, это должно работать автоматически. Если вы этого не сделаете и явно вызываете компилятор C, просто убедитесь, что вы пишете что-то вроде

$ (CC) $ (CFLAGS) -c -o $ @ $ <</p>

Еще более мило, если факт CFLAGS=..., приведенный выше, можно использовать в командной строке, а не записывать в Makefile (прочитайте man(1) справочную страницу); это позволяет легко перенастроить параметры компиляции в последний момент, но параметры не будут сохранены.

Лучшие практики включают использование CPPFLAGS вместо CFLAGS и использование += вместо =; однако поддержка этих функций не так универсальна, как указано выше, и зависит от вашей системы изготовления.

7 голосов
/ 14 марта 2011

Да.

Большинство компиляторов поддерживают параметры командной строки для указания # define.Для Visual C ++ это опция / D .

...