gpt4 book ai didi

clang - 如何将 .pch 与 clang 一起使用?

转载 作者:行者123 更新时间:2023-12-04 11:29:35 26 4
gpt4 key购买 nike

我有头文件 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");
}

我关注了 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 链接,但我可以编译/链接源+头文件。
与 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 编译/链接并且包含路径(应该)相同。

附注。
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?

关于clang - 如何将 .pch 与 clang 一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26755219/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com