标签: precompiled-headers

错误:命令/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang失败,退出代码为1

我正在开发适用于iPhone和iPad的应用程序.

突然间我因为这个错误而无法运行我的项目:

clang: error: no such file or directory: '/Users/AkdemiaMacBookAir/Developer/iOS/ios-akdemia/ios-akdemia/ios-akdemia-Prefix.pch'
clang: error: no input files
Command /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang failed with exit code 1
Run Code Online (Sandbox Code Playgroud)

我正在寻找Stack Overflow,我实际上检查了我的前缀标题是正确的.

我的xcode构建设置

这是文件:

Finder中的文件夹和文件

我不明白为什么Xcode的尝试从这个路径"/Users/AkdemiaMacBookAir/Developer/iOS/ios-akdemia/ios-akdemia/ios-akdemia-Prefix.pch"如果我从来没有告诉它编译PCH.

xcode prefix precompiled-headers

3
推荐指数
1
解决办法
2万
查看次数

使用 makefile 构建时 GCC 不使用预编译头

我正在尝试将预编译头与 GCC 一起使用来加快编译过程。如果我直接从命令行启动编译,则会使用预编译头,但如果我尝试使用 makefile 来组织编译,则不会使用预编译头。

更具体地说,我尝试使用 GCC 8.1.0 编译文件main.cpp,使用预编译标头lib.hpp.gch作为 main.cpp 中的第一个标记包含的文件lib.hpp

lib.hpp 预编译为

$ g++ -O2 -H -Wall -std=c++17 -c lib.hpp
Run Code Online (Sandbox Code Playgroud)

然后编译 main.cpp

$ g++ -O2 -H -Wall -std=c++17 -c main.cpp -o main.o
! lib.hpp.gch
...
Run Code Online (Sandbox Code Playgroud)

我可以从“!”中看到 实际使用的是预编译的 lib.hpp.gch。

如果我为此编写一个 makefile

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
Run Code Online (Sandbox Code Playgroud)

然后使用 make,我希望预编译头的用法相同

但它失败了,从“x”可以看出:

$ make
g++ -O2 -H …
Run Code Online (Sandbox Code Playgroud)

c++ gcc makefile precompiled-headers

3
推荐指数
1
解决办法
5191
查看次数

Clang CMAKE 预编译头文件

我找到了很多关于如何为 MSVC 使用预编译头的示例,但我似乎找不到任何使用 clang 的示例。从this SO post我可以看到clang命令,但我想知道它们如何转换为cmake:

使用预编译头文件减少 clang 编译时间

创建预编译的头文件包括所有你没有更改的头文件 > > 到 Query.h 并使用:

clang -cc1 Query.h -emit-pch -o Query.h.pch 使用预编译头类型:

clang -cc1 -include-pch Query.h.pch Query.cpp -shared -o libquery.so; Query.cpp 需要包含 Query.h

编辑:使用 clang 6 和 cmake 3.11.2

c++ cmake clang precompiled-headers

3
推荐指数
1
解决办法
2809
查看次数

如何在不关闭预编译头的情况下修复C1010错误?

所以,我必须在我的VS 2005项目中使用预编译的头文件.现在我有一个没有#include"stdafx.h"的共享源文件...如何在我的项目中包含共享源文件而不将stdafx.h添加到源文件的顶部而不关闭预编译头?

c++ precompiled-headers visual-studio

2
推荐指数
1
解决办法
1806
查看次数

如何在visual studio c ++中使用预编译的动态库?

我想在我的项目中使用预编译库.我有3个文件夹:Include(.h文件),Lib(带.lib文件)和Bin(带.dll文件和.pdb文件).我以前从未使用预编译库(我希望这是正确的术语.如果我错了,请纠正我).我想使用这个API.如何将所有这些东西添加到我的项目中?

我使用visual studio 2010(cpp).谢谢.

c++ api visual-studio-2010 precompiled-headers

2
推荐指数
1
解决办法
4104
查看次数

Visual Studio使用vc90.pdb做什么用途?

根据http://msdn.microsoft.com/en-us/library/yd4f8bd1.aspx,项目有2个.pdb文件.

project.pdb我用来允许稍后加载minidumps,但vcx0.pdb究竟用于什么?如果它丢失了,那不是问题,我不需要存储任何东西.

我正在尝试在不同的项目中共享PCH,这个文件是导致问题的唯一因素.如果我将使用PCH创建的vcx0.pdb复制到所有项目,那些项目将使用此文件作为基础并向其添加自己的符号.如果不为这些项目提供此.pdb文件,则会失败.

我发现了几件事:

  • 警告LNK4099报告缺少vcx0.pdb似乎并不重要.
  • 如果我使用/ Fd将多个项目指向同一个文件,并禁用并行构建以使其工作,则每个项目都会继续使用自己的符号递增

c++ build-automation precompiled-headers visual-studio-2008

2
推荐指数
1
解决办法
4505
查看次数

预编译头文件:是和不是?

我知道预编译的头被用于加快编译,但有什么做的和不该做哪些文件,我应该包括在其中?例如,我有一个项目,该项目使用了很多boost库,因此我只是将boost标头文件包含在其中stdafx.h(我正在使用VS2008)。我是否也应该在其中包含每个标准头文件?例如,即使我包含<vector>但从不使用,这会增加我的可执行文件的大小std::vector吗?在stdafx.h中包含我自己项目的头文件是一个坏主意吗?

c++ precompiled-headers

2
推荐指数
1
解决办法
1229
查看次数

使用cmake有条件地生成源输入文件

我正在使用cmake和C++项目.我想在GCC中使用预编译头文件.

我想运行cmake一次,然后在运行时make,我希望这些操作发生:

  1. 在整个源代码树上运行我的自定义工具(python脚本).它在一些子目录中生成precompiled.h头文件.它的目的是扫描*.h和*.cpp用于#include并将它们移动到常见的precompiled.h文件.
  2. g++ -c precompiled.h -o precompiled.h.gch仅当precompiled.h文件在步骤1之后发生更改时,才生成GCC的预编译头文件().
  3. 构建过时的目标(在第2步之后,因为我想使用.gch文件)

我设法添加依赖项,所以每当我构建任何目标时,我的python脚本的目标都会被执行(这很难看,因为现在每个目标都必须依赖于单个global_init目标).此外,我可以修改我的python脚本,因此它不会在没有必要时修改precompiled.h.

但我不知道接下来该做什么.有没有办法告诉cmake它应该运行我的自定义脚本,并确定是否必须创建precompiled.h.gch?现在它始终构建(此文件包含许多#include,因此需要一些时间).基本上:

  1. 执行python脚本 - > precompiled.h可能会更新
  2. 检查precompiled.h时间戳,如果它更新 - > build precompiled.h.gch
  3. 标准编译步骤

我在许多地方看过,但是cmake(和make)计算依赖关系的方式似乎太弱而无法完成这项任务.

在这个问题中: 懒惰的c ++ 编译总是在执行lazycpp之后发生.在我的情况下,这不是最佳的.

c++ gcc makefile cmake precompiled-headers

2
推荐指数
1
解决办法
5220
查看次数

在每个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 $@ $<
Run Code Online (Sandbox Code Playgroud)

我的问题是,第一次创建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)
Run Code Online (Sandbox Code Playgroud)

但是它仍然每次都被创建:(

c++ gcc makefile g++ precompiled-headers

2
推荐指数
1
解决办法
2436
查看次数

C++中的#define里面的结构

作为C++的新手,我不太了解我遇到的一些指令,例如:

#ifndef BOT_H_
#define BOT_H_

#include "State.h"

/*
    This struct represents your bot in the game of Ants
*/
struct Bot
{
    State state;

    Bot();

    void playGame();    //plays a single game of Ants

    void makeMoves();   //makes moves for a single turn
    void endTurn();     //indicates to the engine that it has made its moves
};

#endif //BOT_H_
Run Code Online (Sandbox Code Playgroud)

我不明白的是"#ifndef BOT_H_"和"#define - #endif"

从我收集的内容中,它定义了一个常量BOT_H_,如果在预编译器查看它时尚未定义它.我实际上并没有得到它内部的结构是一个常量,以及如何让我访问其中的函数.

我也不明白为什么我们这样做呢?我曾经使用过C++而我没有使用.h文件,所以它可能很容易让我失踪.

c++ precompiled-headers c-preprocessor

2
推荐指数
2
解决办法
266
查看次数