什么是 CMAKE_CXX_FLAGS 以及哪些可用

Chr*_*isz 2 c++ linux cmake cross-compiling

我使用 C++ 已经很长时间了,但我来自 Windows。

我接到了一个使用 CMake 的项目。我用谷歌搜索试图学习它。

我运行cmake . 我假设它总是寻找CMakeLists.txt并生成makefile。

这会创建更多的 cmake 文件和 make 文件。然后我被指示跑make package。我假设package只是一个可以是任何东西的目标名称。

然后我收到错误:

c++: error: unrecognized command line option ‘-mthumb-interwork’
c++: error: unrecognized command line option ‘-mfloat-abi=hard’
c++: error: unrecognized command line option ‘-mfpu=neon’
Run Code Online (Sandbox Code Playgroud)

我认为这是因为我正在尝试针对与我所使用的架构不同的架构进行编译。我假设所有的 cmake 文件都会为我正确设置。我还假设没有什么是专有的。

我在 CMakeLists.txt 中看到了这一行

SET(CMAKE_CXX_FLAGS "-march=armv7-a -mthumb-interwork -mfloat-abi=hard -mfpu=neon -mtune=cortex-a9 -std=c++11 -O3")
Run Code Online (Sandbox Code Playgroud)

如果我查看官方 cmake 文档,它会说,并且我引用了 “所有构建类型的标志”。....不是很有帮助

我认为它没有使用正确的编译器,但我也看不到 CMakeLists.txt 中编译器的指定位置。

问题是:为什么这些标志无法识别?

MSa*_*ers 5

在 Linux 世界中,通常假设您不需要按名称指定编译器;相反,您安排c++引用编译器。这可能涉及设置PATH、创建 shell 别名或符号链接。

显然你已经这样做了,因为你的编译器被调用并且抱怨标准 GCC 标志 - 显然你的编译器不是 GCC。

然而,CMakeLists.txt 文件在很大程度上假设它是为 GCC 设计的。不要为此责怪 CMake。CMake 是工具,CMakeLists.txt 是特定于项目的说明。这是创建特定 CMakeLists.txt 文件的人的问题。

没有简单的解决办法。该-mfpu=neon选项gcc很有可能是该程序所必需的,并且任何人都可以猜测您在其他编译器上需要什么。