我想编写一个cmake文件,在调试和发布版本中为clang ++,g ++和MSVC设置不同的编译器选项.我目前正在做的事情看起来像这样:
if(MSVC)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /std:c++latest /W4")
# Default debug flags are OK
set(CMAKE_CXX_FLAGS_RELEASE "{CMAKE_CXX_FLAGS_RELEASE} /O2")
else()
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++1z -Wall -Wextra -Werror")
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} some other flags")
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -O3")
if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -stdlib=libc++")
else()
# nothing special for gcc at the moment
endif()
endif()
Run Code Online (Sandbox Code Playgroud)
但我有几个问题:
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} Foo")用append(CMAKE_CXX_FLAGS "Foo")? CMAKE_CXX_FLAGS和类似的变量,但我不知道使用什么其他机制.make foo_debug_clang.所以我的问题是
我在互联网上找到的大多数参考资料要么过时,要么只显示一些简单的例子.我目前正在使用cmake3.8,但如果这有什么不同,我对更新版本的答案更感兴趣.
我正在尝试建立一个基本项目,并且我想使用 gcov。当我使用 g++ 时,它可以工作:
g++ main.cpp whatever.cpp -fprofile-arcs -ftest-coverage
Run Code Online (Sandbox Code Playgroud)
gcov 的输出正常:
gcov main.gcno
main.gcda:cannot open data file, assuming not executed
File 'main.cpp'
Lines executed:0.00% of 20
Creating 'main.cpp.gcov'
File '/usr/include/c++/7/iostream'
Lines executed:0.00% of 1
Creating 'iostream.gcov'
Run Code Online (Sandbox Code Playgroud)
但是,我需要使用 clang。运行编译命令后:
clang++-6.0 main.cpp whatever.cpp -fprofile-arcs -ftest-coverage
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
main.gcno:version '402*', prefer 'A73*'
gcov: out of memory allocating 16158246392 bytes after a total of 0 bytes
Run Code Online (Sandbox Code Playgroud)
我的gcov版本是7.3.0,与gcc和g++相同。
知道出了什么问题以及我能做些什么吗?
谢谢!