我找不到任何关于它的信息,但只有相反的方式(例如,如何设置CMake使用clang).
我已经使用brew安装了gcc-4.8,设置了所有依赖项,标题等,现在CMake拒绝使用gcc.
我已经设置了包含别名和实际条目的bash配置文件:
export CC=/usr/bin/gcc
export CXX=/usr/bin/g++
alias gcc='gcc-4.8'
alias cc='gcc-4.8'
alias g++='g++-4.8'
alias c++='c++-4.8'
Run Code Online (Sandbox Code Playgroud)
然而,CMake顽固地拒绝使用gcc,而是恢复为clang:
air:build alex$ cmake -DCMAKE_BUILD_TYPE=DEBUG ..
-- The C compiler identification is Clang 5.1.0
-- The CXX compiler identification is Clang 5.1.0
-- Check for working C compiler: /usr/bin/gcc
-- Check for working C compiler: /usr/bin/gcc -- works
Run Code Online (Sandbox Code Playgroud) 我有一个使用CMake构建的C++项目.我通常在OSX上构建,但现在我正在尝试使用Windows版本.出于兼容性原因,我想在Windows上使用Clang.
我从LLVM安装了预编译的Clang 3.8二进制文件:
C:\Program Files\LLVM\bin\clang.exe
C:\Program Files\LLVM\bin\clang++.exe
Run Code Online (Sandbox Code Playgroud)
它也安装在我的PATH上:
>clang++
clang++.exe: error: no input files
Run Code Online (Sandbox Code Playgroud)
我有两个问题:
clang++我打电话时如何告诉CMake使用cmake --build?我刚刚在我的Ubuntu机器上安装了clang ++ 3.6,但无法将其设置为默认的c ++编译器.
sudo update-alternatives --config c++
Run Code Online (Sandbox Code Playgroud)
告诉我
There is only one alternative in link group c++ (providing /usr/bin/c++): /usr/bin/g++
Nothing to configure.
Run Code Online (Sandbox Code Playgroud)
和clang ++没有显示出来
sudo update-alternatives --query c++
Run Code Online (Sandbox Code Playgroud)
要么(这是预期的).但编译器肯定有效:
which clang++-3.6
/usr/bin/clang++-3.6
Run Code Online (Sandbox Code Playgroud)
我的操作系统版本是Ubuntu 14.04.1 LTS.
我需要做些什么来update-alternatives包括clang ++ 3.6?
注意:我之前使用过clang3.4,但删除了它,因为它不支持我需要的所有c ++ 11功能.这似乎只是安装clang ++包时安装的版本(我特意安装了clang ++ 3.6); update-alternativesDID适用于该版本.
我正在使用CMake为OSX Lion上的Xcode 4.2生成一个项目文件,我正在使用LLVM中的一些C++ 0x功能,如nullptr和auto.为了使用它们,Xcode要求设置2个项目设置:
C++语言方言设置为C++ 0x [-std = C++ 0x]
C++标准库设置为libc ++(LLVM C++标准库,支持C++ 0X)
目前每次生成Xcode项目时,我都必须进入并手动调整这些设置.
有没有办法在CMake中指定这些设置?
谢谢
我目前在Windows上安装了cmake,clang和ninja.我正在尝试使用CMake生成一个忍者构建文件来编译一个非常简单的hello world程序.
我的CMakeLists.txt看起来像这样:
cmake_minimum_required(VERSION 2.8)
project(test_project)
add_executable(main main.cpp)
Run Code Online (Sandbox Code Playgroud)
main.cpp 是一个简单的hello world程序.
在命令行上我运行这个:cmake -G Ninja ..我得到以下错误:
-- The C compiler identification is Clang 3.5.0
clang.exe: error: no such file or directory: '/nologo'
clang.exe: error: no such file or directory: '/showIncludes'
-- The CXX compiler identification is Clang 3.5.0
clang.exe: error: no such file or directory: '/nologo'
clang.exe: error: no such file or directory: '/showIncludes'
-- Check for working C compiler using: Ninja
-- Check for working C compiler using: …Run Code Online (Sandbox Code Playgroud) 我正在尝试在CMake项目上应用链接时间优化和LLVM,这将创建一个共享库.我的问题几乎和这个问题一样:
但是,答案似乎不再适用,因为llvm-ld新版本中不存在.在命令行上,我运行以下命令来获取LTO(假设只有2个.cpp文件):
编译为字节代码:
clang++ -c FirstClass.cpp -O3 -flto -o FirstClass.bc
clang++ -c SecondClass.cpp -O3 -flto -o SecondClass.bc
Run Code Online (Sandbox Code Playgroud)
链接字节码:
llvm-link FirstClass.bc SecondClass.bc -o unoptimized.bc
Run Code Online (Sandbox Code Playgroud)
优化字节码:
opt -O3 unoptimized.bc -o optimized.bc
Run Code Online (Sandbox Code Playgroud)
将字节代码转换为共享对象:
clang++ -shared optimized.bc -o libTest.so
Run Code Online (Sandbox Code Playgroud)
有人可以告诉我如何让CMake运行其他步骤吗?
我想改变的默认值CMAKE_CXX_FLAGS_RELEASE或CMAKE_CXX_FLAGS_DEBUG在CMake的.基本上,我有一些项目默认值与CMake略有不同(例如发布),我不应该问自己"哦,当添加add_compile_options时,他们的-O3或我们的-O2优先."
现在,我知道如何设置这些值,但我不知道如何使用户可以通过两种常用方式进行编辑:DCMAKE_CXX_FLAGS_DEBUG=yourflags在命令行上使用 - 或者使用ccmake或CMakeSetup配置它.
问题是CMAKE为这些设置和缓存它们自己的默认值,如果你试图在不使用FORCE的情况下覆盖变量,那么"默认值"永远不会改变.如果我在set命令中使用FORCE:set(CMAKE_CXX_FLAGS_DEBUG blah CACHE STRING "" FORCE)它会在每次运行脚本时覆盖它,从而消除了用户根据需要进行更改的可能性.
我设法通过执行以下操作来破解它与CCMAKE一起工作,但是这仍然不起作用,cmake -DCMAKE_CXX_FLAGS_DEBUG因为它覆盖用户更改后完成它:
set(DEFAULTS_SET FALSE CACHE BOOL "")
set(CMAKE_CXX_FLAGS_DEBUG "-this -that" CACHE STRING "" FORCE)
set(DEFAULTS_SET TRUE CACHE BOOL "" FORCE)
Run Code Online (Sandbox Code Playgroud)
显然,这是一个讨厌的黑客,并没有完全工作(在cmake -Dwhatever = thisorthat的情况下).我也可以添加其他构建类型,但我真的不明白为什么只需更改一些简单的东西就是必要的.
编辑2015年3月1日:
我已经创建了一个有效的解决方案,尽管我仍然对我必须做的事情感到非常激动.我看到其他评论解决了设置CMAKE_CXX_FLAGS_DEBUG和朋友的问题而没有让他们受到破坏,但这最初对我不起作用,因为我试图根据正在使用的编译器选择它们.但是,在它已经为我填充变量之前,编译器尚未确定.我使用的技巧如下.您必须在项目命令之前将flags变量设置为'special'.
set(CMAKE_CXX_FLAGS_DEBUG "_UNSET" CACHE STRING "")
project(your_project C CXX)
if(${CMAKE_CXX_FLAGS_DEBUG} STREQUAL "_UNSET")
# Do some compiler switching here and then set your flags with FORCE.
set(CMAKE_CXX_FLAGS_DEBUG "-ggdb3 -O0" CACHE STRING "" FORCE)
endif() …Run Code Online (Sandbox Code Playgroud) 我正在尝试在 macOS 上从源代码安装 Riak ( https://docs.riak.com/riak/kv/2.2.3/setup/installing/mac-osx.1.html#installing-from-source )。
有一个注释:
Riak 不会使用 Clang 进行编译。请确保您的默认 C/C++ 编译器是 GCC
如何找出默认编译器以及如何更改它?
macOS Catalina (10.15.4),该命令打印:
$ which clang
/usr/bin/clang
$ which gcc
/usr/bin/gcc
Run Code Online (Sandbox Code Playgroud) 这是我的第一个 cmake 文件。我有一个带有 clang 和 g++ 的 linux 系统。还安装了 libc++。我在 Mac (xcode) 上开发但部署到 linux。我正在编写一个 cmake 文件,我可以在其中选择 clang 或 g++ 和 libc++ 或 libstdc++。所以有 4 种可能的组合。
我想出了如何选择编译器并在其上强制使用 c++11,但我无法弄清楚如何指定标准库。有什么建议?
这是我到目前为止:
## cmake ###
cmake_minimum_required (VERSION 3.5)
#set project directories
set(ProjectDirectory ${CMAKE_SOURCE_DIR}) #.../Project/
set(BuildDirectory ${ProjectDirectory}/Build)
set(ProductDirectory ${ProjectDirectory}/Products)
set(sourceDirectory ${ProjectDirectory}/Source)
#print project directories
message(${ProjectDirectory})
message(${BuildDirectory})
message(${ProductDirectory})
#configure cmake
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${ProductDirectory})
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${ProductDirectory})
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${ProductDirectory})
set(CMAKE_VERBOSE_MAKEFILE on)
#compiler and standard library settings
set(CMAKE_CXX_COMPILER "clang++")
set(CMAKE_CXX_STANDARD 11)
#set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -v -stdlib=libc++")
#libstdc++ #linux
#libc++ #OS X …Run Code Online (Sandbox Code Playgroud) 我正在为LLVM/Clang编写自定义传递,重新编译往往需要一段时间并使用大量内存.我听说黄金链接器(1)花费的时间更少,(2)使用的内存比标准的ld链接器少.
有没有办法将标志传递到LLVM/Clang构建过程并更改为黄金链接器?根据这个答案,我一直在尝试使用覆盖文件,但我似乎没有取得很大的成功.
我还要注意到我正在使用Clang 3.9编译最新的Clang/LLVM版本(4.0); 如果有必要,我不介意切换回GCC,而是宁愿避免它.