【发布时间】:2017-05-18 17:09:08
【问题描述】:
我的 Toolchain.cmake 中有以下设置
set(CMAKE_SYSTEM_NAME Linux)
set(CMAKE_SYSTEM_VERSION 1)
set(CMAKE_SYSTEM_PROCESSOR x86_64)
set(cross_triple "x86_64-linux-gnu")
set(clang_5.0 "/third_party/llvm-build/Release+Asserts")
set(clang_link_flags "-lstdc++")
set(CMAKE_C_COMPILER ${clang_5.0}/bin/clang)
set(CMAKE_CXX_COMPILER ${clang_5.0}/bin/clang++)
set(CMAKE_ASM_COMPILER ${CMAKE_C_COMPILER})
set(CMAKE_CXX_FLAGS "-std=c++11 -stdlib=libc++ -Wno-c++11-narrowing -v")
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${clang_link_flags}")
而且,我的 clang 编译器文件夹如下:
-rwxr-xr-x 1 1024 1024 15774563 May 11 21:06 sancov
-rwxr-xr-x 1 1024 1024 3925178 May 11 21:06 llvm-symbolizer
-rwxr-xr-x 1 1024 1024 16048083 May 11 21:06 llvm-ar
-rwxr-xr-x 1 1024 1024 63993992 May 11 21:06 lld
-rwxr-xr-x 1 1024 1024 82308936 May 11 21:06 clang
lrwxrwxrwx 1 1024 1024 3 May 18 01:11 ld.lld -> lld
lrwxrwxrwx 1 1024 1024 5 May 18 01:11 clang-cl -> clang
lrwxrwxrwx 1 1024 1024 5 May 18 01:11 clang++ -> clang
对我来说一切都很好。但是,当我使用 Cmake 然后 make 编译我的项目时,对于所有 .cpp .c 文件,Cmake 选择使用 clang 而不是 clang++ 来编译源代码,例如:
"/third_party/llvm-build/Release+Asserts/bin/clang" -cc1 -x c++ xxx.cpp -o xxx.cpp.o
由于某种原因,“-lstdc++”标志不会在链接器中生效,这会导致一些问题。
我的问题:
为什么cmake选择使用“clang -x c++”,而不是直接使用clang++?这里有什么遗漏吗?如何让cmake选择clang++?
在 CMAKE_EXE_LINKER_FLAGS 中定义“-lstdc++”看起来好像不生效。你能说出可能是什么原因吗?
谢谢。
【问题讨论】:
-
第二个问题很容易搜索。例如。 stackoverflow.com/questions/32698580/….