【问题标题】:cmake invalid numeric argumentscmake 无效的数字参数
【发布时间】:2021-09-06 16:08:01
【问题描述】:

Windows 10 VS2019 Cmake 3.20.5

https://github.com/ftexchange/ftx/tree/master/cpp

每当我尝试运行 cpp 文件 (rest_test.cc) 时,我都会收到命令行错误 D8021: invalid numeric argument '/Werror' etc. for many flags here

set(CMAKE_CXX_STANDARD 17)

set(CMAKE_CXX_FLAGS "-Wall -Werror -Wfatal-errors -Wpedantic -Wextra -Wmissing-include-dirs -Wconversion -Wsign-conversion -pthread")
add_compile_options(-Wall -Werror -Wfatal-errors -Wpedantic -Wextra -Wmissing-include-dirs -Wconversion -Wsign-conversion -pthread)

我不知道如何继续

【问题讨论】:

  • 因为MSVC中没有参数/Werror?你应该删除它。

标签: c++ visual-studio cmake compiler-errors visual-studio-2019


【解决方案1】:

这些标志用于 GCC 兼容的编译器,而不是 MSVC。您必须将它们从您遇到(或编写)的构建中删除。

“无效数字参数”的原因是因为 MSVC numbers 其警告级别。例如,要启用所有(太多)警告,您可以传递/W4。 MSVC 尝试将 error 解析为数字,因为它希望找到像 /W1/W3 这样的标志。

此类标志最初不属于 CMakeLists.txt 文件。由于您刚刚经历的原因,设置CMAKE_CXX_FLAGS 是不好的做法。在学习 CMake 时请记住这一点:只有构建项目绝对需要的东西才属于 CMakeLists.txt。警告标志不是绝对必需的。

【讨论】:

  • "设置 CMAKE_CXX_FLAGS 是一种不好的做法,这正是您刚刚经历的原因。" - 遇到 OP 的唯一原因是该项目没有为 MSVC 准备,因为它在添加 compiler-specific 选项时没有检查编译器。就其本身而言,设置CMAKE_CXX_FLAGS 并没有什么不好。参见例如that question 关于以多平台方式执行此操作的正确方法。
  • @Tsyvarev - 我完全不同意。我很想请你喝杯咖啡,找个时间谈谈。
  • @Tsyvarev - 我已经评论了你链接到我的答案。 “编译器特定”选项的概念归结为编译器版本,而不仅仅是它的命令行语法。在 CMakeLists.txt(而不是工具链或预设)中放置警告(尤其是作为错误的警告)会让人头疼。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-08-22
  • 2016-07-07
  • 2016-08-07
  • 2020-07-13
  • 2016-05-11
  • 1970-01-01
  • 2019-01-07
相关资源
最近更新 更多