首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用.pch与clang?

如何使用.pch与clang?
EN

Stack Overflow用户
提问于 2014-11-05 10:43:53
回答 1查看 7.2K关注 0票数 7

我有头文件Heer.h:

代码语言:javascript
复制
#define TEST_VALUE 1
#define TEST_STRING "hello world"

和源文件source.cpp:

代码语言:javascript
复制
#include "header.h"
#include "stdio.h"

int main() {
    printf(TEST_STRING"\n");
}

我跟踪了clang pch文章并表演了:

代码语言:javascript
复制
MBA-Anton:pch asmirnov$ clang -cc1 ./header.h -emit-pch -o ./header.pch
MBA-Anton:pch asmirnov$ clang -cc1 -include-pch header.pch source.cpp -o source
error: C99 was enabled in PCH file but is currently disabled
1 error generated.
MBA-Anton:pch asmirnov$ clang -I. source.cpp -o source
MBA-Anton:pch asmirnov$ ls
header.h    header.pch  source      source.cpp
MBA-Anton:pch asmirnov$ ./source 
hello world

所以我不能链接到source+header,但是我可以编译/链接。与clang文章示例的唯一不同之处在于,我尝试过使用c++,并为c语言进行了描述。

代码语言:javascript
复制
MBA-Anton:pch asmirnov$ clang -cc1 ./header.h -emit-pch -o ./header.pch2 -x c++
MBA-Anton:pch asmirnov$ clang -cc1 -include-pch header.pch2 source.cpp -o source2 -x c++
source.cpp:2:10: fatal error: 'stdio.h' file not found
#include "stdio.h"
         ^
1 error generated.
MBA-Anton:pch asmirnov$ ls -l
total 496
-rw-r--r--  1 asmirnov  wheel      56  5 ноя 15:31 header.h
-rw-r--r--  1 asmirnov  wheel  112564  5 ноя 15:50 header.pch
-rw-r--r--  1 asmirnov  wheel  116236  5 ноя 15:50 header.pch2
-rwxr-xr-x  1 asmirnov  wheel    8456  5 ноя 15:42 source
-rw-r--r--  1 asmirnov  wheel      80  5 ноя 15:32 source.cpp

再一次尝试指定c++11:

代码语言:javascript
复制
MBA-Anton:pch asmirnov$ clang -cc1 ./header.h -emit-pch -o ./header.pch3 -x c++ -std=c++11
MBA-Anton:pch asmirnov$ clang -cc1 -include-pch header.pch3 source.cpp -o source3 -x c++ -std=c++11
source.cpp:2:10: fatal error: 'stdio.h' file not found
#include "stdio.h"
         ^
1 error generated.
MBA-Anton:pch asmirnov$ ls -l
total 728
-rw-r--r--  1 asmirnov  wheel      56  5 ноя 15:31 header.h
-rw-r--r--  1 asmirnov  wheel  112564  5 ноя 15:50 header.pch
-rw-r--r--  1 asmirnov  wheel  116236  5 ноя 15:54 header.pch2
-rw-r--r--  1 asmirnov  wheel  117132  5 ноя 15:57 header.pch3
-rwxr-xr-x  1 asmirnov  wheel    8456  5 ноя 15:42 source
-rw-r--r--  1 asmirnov  wheel      80  5 ноя 15:57 source.cpp

我不想添加-I,因为我能够用clang -I. source.cpp -o source编译/链接,并且包含路径(应该是相同的)。

PS。

代码语言:javascript
复制
MBA-Anton:pch asmirnov$ clang --version
Apple LLVM version 6.0 (clang-600.0.54) (based on LLVM 3.5svn)
Target: x86_64-apple-darwin13.3.0
Thread model: posix
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-11-05 17:58:05

我已经解决了:

代码语言:javascript
复制
MBA-Anton:pch asmirnov$ clang++ -x c++-header header.h -emit-pch -o header.pch
MBA-Anton:pch asmirnov$ clang++ -include-pch header.pch source.cpp -o source -x c++

顺便说一句,如果我重命名header.h .h并尝试链接可执行文件,我会得到错误:

代码语言:javascript
复制
MBA-Anton:pch asmirnov$ clang++ -include-pch header.pch source.cpp -o source -x c++
fatal error: malformed or corrupted AST file: 'could not find file '/tmp/pch/header.h' referenced by
      AST file'
1 error generated.

这意味着它仍然需要头文件!这是预期的行为吗?

PS2。我试图在.pch中再添加一个标题,但失败了:

代码语言:javascript
复制
MBA-Anton:pch asmirnov$ clang++ -x c++-header header.h header2.h -emit-pch -o headers.pch
clang: error: cannot specify -o when generating multiple output files

创建独立的,所以询问它:如何为许多头生成.pch?

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26755219

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档