How do I compile C++ with Clang?
The command clang
is for C, and the command clang++
is for C++.
I do not know why there is no answer directly addressing the problem. When you
want to compile C++ program, it is best to use clang++
. For example, the
following works for me:
clang++ -Wall -std=c++11 test.cc -o test
If compiled correctly, it will produce the executable file test
, and you can
run the file by using ./test
.
Or you can just use clang++ test.cc
to compile the program. It will produce a
default executable file named a.out
. Use ./a.out
to run the file.
The whole process is a lot like g++ if you are familiar with g++. See this
post to check which warnings are included with -Wall
option. This
page shows a list of diagnostic flags supported by Clang.
A note on using clang -x c++
: Kim Gräsman says that you can also use
clang -x c++
to compile cpp programs, but that may not be true. For example,
I am having a simple program below:
#include <iostream>
#include <vector>
int main() {
/* std::vector<int> v = {1, 2, 3, 4, 5}; */
std::vector<int> v(10, 5);
int sum = 0;
for (int i = 0; i < v.size(); i++){
sum += v[i]*2;
}
std::cout << "sum is " << sum << std::endl;
return 0;
}
clang++ test.cc -o test
will compile successfully, but clang -x c++
will
not, showing a lot undefined references errors. So I guess they are not exactly
equivalent. It is best to use clang++
instead of clang -x c++
when
compiling c++ programs to avoid extra troubles.
- clang version: 11.0.0
- Platform: Ubuntu 16.04
Also, for posterity -- Clang (like GCC) accepts the -x
switch to set the language of the input files, for example,
$ clang -x c++ some_random_file.txt
This mailing list thread explains the difference between clang
and clang++
well: Difference between clang and clang++