我的cmake文件:
cmake_minimum_required(VERSION 3.10)
set(CMAKE_CXX_COMPILER "gcc-7")
project(invertedindex)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wextra -Wconversion -O0")
set(SOURCE_FILES main.cpp inverted_index.hpp params.hpp)
add_executable(invertedindex ${SOURCE_FILES})
幸运的是,我查看了生成的编译器命令
/usr/local/bin/gcc-7 -Wall -Wextra -Wconversion -O0 -std=gnu++1z -o CMakeFiles/invertedindex.dir/main.cpp.o -c /Users/adam/school/cpp/invertedindex/main.cpp
并看到了-std=gnu++1z
。我没有兴趣长时间研究f * ck是什么以及为什么它在那里
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
怀疑-std = gnu ++ 1z不是一个稳定的,完成的库,或者......但是gcc 7支持c ++ 17标准的大部分功能。
当我知道它应该可以工作时,我将生成的命令参数手动替换为-std=gnu++17
并且它可以工作。怎么了?如何在cmake中使其工作?
答案 0 :(得分:0)
参见how to specify compiler in cmake
我正在使用标记为avoid的第三种方法。
第一种方法,即设置curl -X PUT http://127.0.0.1:5984/shop/_design/product_validation -d '{"validate_doc_update": "function(newDoc, oldDoc, userCtx) { if (newDoc.type == \"product\") { if (!newDoc[\"name\"]) { throw({forbidden: \"missing name\"}) } } }"}'
env var不起作用(编译器是一些Mac g ++)。
所以我尝试了第二种方法 - 在cmake args CXX
中指定编译器,这是有效的。即使再次生成c ++ 1z参数。我不明白,但在我休息之前我很好。
-D CMAKE_C_COMPILER=gcc-7