使用特定的 gcc 工具链从源代码构建 clang

Bar*_*rry 3 gcc clang llvm-clang clang++

我正在从源代码构建 clang,但使用不在正常位置的 gcc 7.2 构建。我希望生成的clang++二进制文件默认使用此工具链。我尝试这样做:

$ export GCC_PREFIX=/path/to/gcc/7.2
$ mkdir -p build
$ cd build
$ cmake -G Ninja -DCMAKE_C_COMPILER=${GCC_PREFIX}/bin/gcc \
     -DCMAKE_CXX_COMPILER=${GCC_PREFIX}/bin/g++ \
     -DCMAKE_BUILD_TYPE=RelWithDebInfo -DLLVM_TARGETS_TO_BUILD=X86 ..
Run Code Online (Sandbox Code Playgroud)

但生成的构建只是查找/usr/include/c++/4.8.5标准库包含而不是像/path/to/gcc/7.2/include我想要的那样(并且,正如路径所示,4.8.5 有点旧)。有没有办法构建 clang,以便生成的二进制文件将搜索我想要的包含目录的路径?

注意,我知道我使用 运行生成的二进制文件--gcc-toolchain=${GCC_PREFIX}。这样可行。我想做的是将其构建到二进制文件中,这样我就不必每次都输入它。

Bar*_*rry 5

刚刚发现这个。执行此操作的正确方法是提供GCC_INSTALL_PREFIX

$ cmake -G Ninja -DCMAKE_C_COMPILER=${GCC_PREFIX}/bin/gcc \
     -DCMAKE_CXX_COMPILER=${GCC_PREFIX}/bin/g++ \

     -DGCC_INSTALL_PREFIX=${GCC_PREFIX} \

     -DCMAKE_BUILD_TYPE=RelWithDebInfo -DLLVM_TARGETS_TO_BUILD=X86 ..
Run Code Online (Sandbox Code Playgroud)

这是正确的做法。生成的 clang 二进制文件的行为就像您--gcc-toolchain=${GCC_PREFIX}根据需要提供的一样。