预编译头文件在每次制作时都被创建
Pre-compiled header gets created on every make?
我有一个非常简单的makefile,它基本上做了以下事情:
# Pre-compiled header
CORE_PCH_FILENAME =Core.h
CORE_PCH:
$(CXX) $(CXX_CFLAGS) -x c++-header $(CORE_PCH_FILENAME)
#Objects
obj/%.o: CORE_PCH %.cpp obj/%.d
@mkdir -p obj
$(CXX) $(CXX_CFLAGS) -c $*.cpp -o $@
#Dependencies
obj/%.d: %.cpp
@mkdir -p obj
$(CXX) $(CXX_CFLAGS) -MM -MT obj/$*.o -MF $@ $<
我的问题是,我第一次做Core.h。创建Gch 并构建项目。很好。
但是,即使没有改变什么,再次运行make将重新创建Core.h.gch并重新编译所有内容。
如果我没有预编译的头文件,make的行为很好(如果没有任何改变,将不会重新构建任何东西,并且只在进行修改时重新构建必要的东西)
但我真的很想有预编译头,是不是有什么我没有做对!?
编辑:建议如下:
# Pre-compiled header
$(CORE_PCH_FILENAME) =Core.h
CORE_PCH: $(CORE_PCH_FILENAME)
$(CXX) $(CXX_CFLAGS) -x c++-header $(CORE_PCH_FILENAME)
但是它仍然每次都被创建:(
问题是您没有按名称引用gch
,并且没有按字面意思命名为CORE_PCH
的文件。试一试:
CORE_PCH_FILENAME=Core.h
CORE_PCH=$(CORE_PCH_FILENAME).gch
$(CORE_PCH):
$(CXX) $(CXX_CFLAGS) -x c++-header $(CORE_PCH_FILENAME)
CORE_PCH在obj/%的先决条件中。它本身没有先决条件,所以它总是被建立起来。如果将Core.h添加到CORE_PCH的先决条件中,应该就可以了。
相关文章:
- 此代码编译良好,但文件未创建?请指出错误
- 使用带有 ref 参数的成员函数创建线程时出现编译错误
- 在VS Code中编译C / C ++时如何禁用自动创建EXE文件?
- 从编译时已知的日历日期创建"std::chrono::time_point"
- 编译时生成应在构造函数中创建的非 constexpr 对象数组
- 在编译时从 c++ 文件创建枚举
- 在编译时而不是运行时创建一个由两个字节组成的值
- 我可以在不创建项目的情况下在Visual Studio 2019中编译和运行HelloWorld.cpp吗?
- 如何在C++中创建自己的编译密钥
- 从"<Base>std::unique_ptr"创建"ClassType<std::unique_ptr>"时出现编译错误<Derived>
- 使用成员函数创建std::函数不会编译
- 有没有办法在 C++17 中创建编译时类型映射以进行类型检查?
- C++ - 我可以创建编译时变量对象吗?
- 如何为多个C++类型创建编译时检查
- 为什么和如何C++允许使用动态值创建编译时数组
- 使用整数模板参数创建编译时双精度
- 如何使用模板使用fibonacci编号创建编译时的模板/数组/矢量
- 使用 SFINAE 但不创建编译错误
- 使用可变参数模板创建编译时布尔表达式
- Visual Studio 2010创建编译代码的应用程序