Я пытаюсь использовать предварительно скомпилированные заголовки с GCC, чтобы ускорить процесс компиляции.Если я запускаю компиляцию непосредственно из командной строки, используются предварительно скомпилированные заголовки, но если я пытаюсь организовать компиляцию с использованием make-файла, это не так.
Более конкретно, я пытаюсь скомпилировать с помощью GCC 8.1.0 aфайл main.cpp с использованием предварительно скомпилированного заголовка lib.hpp.gch для файла lib.hpp , включенного в качестве первого токена в main.cpp.
lib.hpp предварительно скомпилирован с
$ g++ -O2 -H -Wall -std=c++17 -c lib.hpp
main.cpp затем скомпилирован с
$ g++ -O2 -H -Wall -std=c++17 -c main.cpp -o main.o
! lib.hpp.gch
...
, и я вижу из "!"что на самом деле используется предварительно скомпилированный lib.hpp.gch.
Если я напишу make-файл для этого
CXX = g++
CXXFLAGS = -O2 -H -Wall -std=c++17
main.o: \
main.cpp \
main.hpp \
lib.hpp
$(CXX) $(CXXFLAGS) \
-c main.cpp \
-o main.o
, а затем использую make, я бы ожидал того же самого использования скомпилированного заголовка
но вместо этого происходит сбой, как видно из «x»:
$ make
g++ -O2 -H -Wall -std=c++17 \
-c main.cpp \
-o main.o
x lib.hpp.gch
...
Это очень странно, потому что команда, выдаваемая make, выглядит точно так же, как и та, которую я использовалвручную.
Я также произвел измерение времени и могу подтвердить, что компиляция с помощью make определенно медленнее, чем ручная, подтверждая, что предварительно скомпилированный заголовок не используется.
Что не такв make-файле?