如何使用.pch和clang?
问题描述:
我在头文件header.h:如何使用.pch和clang?
#define TEST_VALUE 1
#define TEST_STRING "hello world"
和源文件source.cpp:
#include "header.h"
#include "stdio.h"
int main() {
printf(TEST_STRING"\n");
}
我已经按照clang pch article和执行:
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链接,但我可以编译/链接源代码头。 与铿锵的文章的例子唯一的区别是我已经尝试过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
并且包含路径(应该)相同。
PS。
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
答
我已经解决了它:
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
创建单独的SO问题吧: How to generate .pch for lots of headers?
HM,它不应该是'铛++'和'的#include'或'#include '? –
PeterT
2014-11-05 11:51:22
我刚刚试过编译头文件,并用'clang ++'和'cstdio'链接 - 没有运气。获得相同的错误 – 4ntoine 2014-11-05 11:54:03
首先,不要使用'-cc1'这种方式 - 只需将您的命令行和'clang - ### -c -o test.cc'作为任何自定义'test.cc'。有很多缺失的内部标志。 – 2014-11-05 12:47:15