2016-11-16 10 views
1

У меня есть унаследованный код, который будет создан с помощью autotools, но я всегда использовал CMake. Некоторые из источников C++ используют стандарты C++ 11 и C++ 14. Однако, когда я бегуКак установить правила сборки для файла с помощью autotools (automake, configure и т. Д.)?

CXXFLAGS="$CXXFLAGS -std=c++14" ./configure 
make 

только некоторые из исходных файлов C++ строятся с -std=c++14 флагом. Если бы это был простой Makefile, и я заметил, что foo.cc не был построен с правильными флагами, я мог бы выглядеть, чтобы изменить

foo.o: foo.cc foo.h 
    $(CXX) -c foo.c 

в

foo.o: foo.cc foo.h 
    $(CXX) $(CXXFLAGS) -c foo.c 

Есть ли аналог этого в Autotools? Я проверил configure.ac и Makefile.am, но не нашел решение.

+0

Вы действительно видите правила foo.o в 'Makefile.am'? Их не должно быть, потому что automake делает это самостоятельно. –

ответ

1

Что вы делаете, установив CXXFLAGS при вызове configure, должен работать. Однако часто авторы Makefile.am ошибаются в настройке CXXFLAGS внутри make-файла, что переопределяет ваши настройки, а не устанавливает AM_CXXFLAGS, как и следовало ожидать. Это может быть здесь.

В любом случае, если для вашей программы требуется C++ 14, вам следует, вероятно, проверить макрос AX_CXX_COMPILE_STDCXX([14]) и поместить его в свой файл configure.ac, а не устанавливать флаги.

0

В случае CXXFLAGS был уже определен с другим -std=... вам нужно выполнить скрипт настройки таким образом, вместо:

./configure CXXFLAGS=" -std=c++14"

Обратите внимание, что @ptomato правильно о разнице между AM_CXXFLAGS и CXXFLAGS.