我正在 Ubuntu 16.10 x64 上构建一个名为 using CMake 的简单 C++ Clang 工具程序ClangEx。
该项目有一个main.cpp文件。其内容如下:
#include "clang/Frontend/FrontendActions.h"
#include "clang/Tooling/CommonOptionsParser.h"
#include "clang/Tooling/Tooling.h"
#include "llvm/Support/CommandLine.h"
using namespace clang::tooling;
using namespace llvm;
static llvm::cl::OptionCategory MyToolCategory("my-tool options");
static cl::extrahelp CommonHelp(CommonOptionsParser::HelpMessage);
static cl::extrahelp MoreHelp("\nMore help text...");
int main(int argc, const char **argv) {
CommonOptionsParser OptionsParser(argc, argv, MyToolCategory);
ClangTool Tool(OptionsParser.getCompilations(),
OptionsParser.getSourcePathList());
return Tool.run(newFrontendActionFactory<clang::SyntaxOnlyAction>().get());
}
Run Code Online (Sandbox Code Playgroud)
它使用 CMake 成功构建,但当我使用它分析示例 C++ 程序时,出现以下错误:
$ ./ClangEx SandwichBar.cpp --
In file included from /home/bmuscede/SandwichBar.cpp:11:
In file included from /home/bmuscede/SandwichBar.h:14:
In file …Run Code Online (Sandbox Code Playgroud) 有没有办法有选择地禁用 clang-tidy 警告。例如,我readability-identifier-naming启用了检查,并且还通过header-filter. 检查所有方法是否采用驼峰命名法。然而,有时有些类会直接替换另一个 STD 类或 Boost 类,因此它们具有小写命名约定。在这种情况下,clang-tidy 会发出很多警告。有没有办法针对特定代码段禁用它们。// clang-format off与clang-format的效果类似// clang-format on。
$ clang --version
clang version 5.0.0 (tags/RELEASE_500/final)
Run Code Online (Sandbox Code Playgroud)
。
CC ../../py/nlrthumb.c
../../py/nlrthumb.c:79:5: error: non-ASM statement in naked function is not supported
return 0; // needed to silence compiler warning
Run Code Online (Sandbox Code Playgroud)
为什么 Clang 不支持non-ASM statement in naked function?
这在gcc.
邮件列表将其解释为
裸函数没有序言或尾声,因此对内联汇编以外的任何内容进行代码生成都可能完全失败。
那么怎么gcc办呢?
我正在从源代码构建 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}。这样可行。我想做的是将其构建到二进制文件中,这样我就不必每次都输入它。
只是一个简单的问题,但我无法\xe2\x80\x99t 在任何地方找到答案。将所有目标文件放入存档时,如何指示 clang++ 仅获取所需的目标文件进行链接,以避免由于 archive\xe2\x80\xaf 中不需要的符号而导致未定义符号错误?
\n假设我们有一个庞大的代码库,并且我们正在使用 C++ 进行开发。我们是否每次都必须重新编译才能测试代码?
如果是的话,那么开发将需要很长时间。
这个问题的解决办法是什么?
我需要检查我的文件中的函数 A 是否正在调用函数 B。我当前的方法是遍历函数 A 中的所有指令,看看是否有任何调用/调用指令正在调用 B。有人能建议更好的方法吗?
安装LLVMbrew install llvm
编辑.zshrc
...\nexport PATH="/usr/local/opt/llvm/bin:$PATH"\nexport LDFLAGS="-L/usr/local/opt/llvm/lib"\nexport CPPFLAGS="-I/usr/local/opt/llvm/include"\n...\nRun Code Online (Sandbox Code Playgroud)\n\nhello.c#include <stdio.h>\nint main()\n{\n printf("Hello, World!");\n return 0;\n}\nRun Code Online (Sandbox Code Playgroud)\n\nclang -v hello.c,我得到:clang version 8.0.1 (tags/RELEASE_801/final)\nTarget: x86_64-apple-darwin18.7.0\nThread model: posix\nInstalledDir: /usr/local/opt/llvm/bin\n "/usr/local/Cellar/llvm/8.0.1/bin/clang-8" -cc1 -triple x86_64-apple-macosx10.14.0 -Wdeprecated-objc-isa-usage -Werror=deprecated-objc-isa-usage -emit-obj -mrelax-all -disable-free -disable-llvm-verifier -discard-value-names -main-file-name hello.c -mrelocation-model pic -pic-level 2 -mthread-model posix -mdisable-fp-elim -masm-verbose -munwind-tables -target-cpu penryn -dwarf-column-info -debugger-tuning=lldb -ggnu-pubnames -target-linker-version 450.3 -v -resource-dir /usr/local/Cellar/llvm/8.0.1/lib/clang/8.0.1 -fdebug-compilation-dir /Users/jdriwer/Projects …Run Code Online (Sandbox Code Playgroud) 无法通过Eclipse获得LLVM-Clang编译.只是在CDT默认的hello world示例上测试它.它给出了以下错误:
clang ++ -O0 -emit-llvm -g3 -Wall -c -fmessage-length = 0 -o src/Test.bc ../src/Test.cpp
llvm -ld -v -native -o test src/Test.bc
Internal构建器:无法运行程序"llvm-ld":未知原因
错误:在PATH中找不到程序"llvm-ld"PATH = [/ usr/bin:/ bin:/ usr/sbin:/ sbin]
发生构建错误,构建停止
我不确定为什么它抱怨PATH,因为我可以通过终端调用clang ++和llvm-ld命令就好了.事实上,当我通过终端输入上述内容时,会出现以下错误.
clang ++ -O0 -emit-llvm -g3 -Wall -c -fmessage-length = 0 -o src/Test.bc ../src/Test.cpp
llvm -ld -v -native -o Test Debug/src/Test. bc
链接bitcode文件'Debug/src/Test.bc'llvm -ld
:错误:无法加载文件'Debug/src/Test.bc':无法加载Bitcode文件'Debug/src/Test.bc':未知类型在类型表中
那么它可能不是Eclipse的问题?从来没有太多的命令行编译人,所以我的知识有限.
我正在跑狮子.通过XCode命令行工具安装clang.通过Macports安装LLVM.必须手动设置我的LLVM路径.
Clang -v说3.1
LLVM是v3.0
我试图用-std = c ++ 14,-std = c ++ 1z,-std = c ++ 1y设置clang-cl参数.他们不工作.我正在使用clang 3.7 pre-build for windows x64和VS 2015.