Clang 如何使用.pch与叮当声?

Clang 如何使用.pch与叮当声?,clang,pch,Clang,Pch,我有头文件header.h: #define TEST_VALUE 1 #define TEST_STRING "hello world" 和源文件source.cpp: #include "header.h" #include "stdio.h" int main() { printf(TEST_STRING"\n"); } 我跟随并表演了: MBA-Anton:pch asmirnov$ clang -cc1 ./header.h -emit-pch -o ./header.p

我有头文件header.h:

#define TEST_VALUE 1
#define TEST_STRING "hello world"
和源文件source.cpp:

#include "header.h"
#include "stdio.h"

int main() {
    printf(TEST_STRING"\n");
}
我跟随并表演了:

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
所以我不能链接到PCH,但我可以编译/链接source+头。 唯一的区别是CLANG文章的例子是我已经尝试C++,它是为C描述的。 所以我尝试过C++语言:

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:

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
和include路径(应该)相同

附言

我已经解决了:

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并尝试链接可执行文件,我会得到错误:

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添加一个标题,但失败:

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
创建了关于它的单独问题:

hm,是不是应该是
clang++
#include
#include
?我刚刚尝试了用
clang++
cstdio
编译标题和链接-运气不好。得到相同的错误首先,不要这样使用
-cc1
——只需比较命令行和
clang-###-c-o test.cc
就可以进行任何自定义
test.cc
。缺少很多内部标志。我从clang的教程中得到了这个命令行(请参阅问题中的链接)。生成/使用pch的正确命令行是什么?@4ntoine尝试从
clang-###-c-o test.cc中提取命令行,并在那里添加基本标志
-包括pch
。或者尝试不使用
-cc1
的短命令行。
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