我从事C ++很久了,但我来自Windows。
我已经交给了一个使用CMake的项目。我已经在Google周围搜寻以尝试学习它。
我运行cmake .
我认为它总是寻找CMakeLists.txt
并生成makefile。
这将创建更多的cmake文件并制作文件。
然后,我被指示运行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’
我认为这些是由于我尝试为不同于我所使用的体系结构而进行编译的事实。我认为所有cmake文件都会为我正确设置。我还假设没有什么是专有的。
我在CMakeLists.txt中看到该行
SET(CMAKE_CXX_FLAGS "-march=armv7-a -mthumb-interwork -mfloat-abi=hard -mfpu=neon -mtune=cortex-a9 -std=c++11 -O3")
如果我看官方的cmake文档,它说,我引用 “所有构建类型的标志。” ...。不是很有帮助
我认为它没有使用正确的编译器,但是我也看不到在CMakeLists.txt中根本没有指定编译器。
问题是: 为什么这些标志无法识别?
答案 0 :(得分:4)
在Linux世界中,通常假设您不需要按名称指定编译器;相反,您安排c++
引用编译器。这可能涉及设置PATH
,创建shell别名或符号链接。
显然,您已经这样做了,因为您的编译器正在被调用并且抱怨标准的GCC标志-显然您的编译器不是GCC。
但是,CMakeLists.txt文件在很大程度上是假定用于GCC的。不要为此怪罪于CMake。 CMake是工具,CMakeLists.txt是特定于项目的说明。这是谁创建特定CMakeLists.txt文件的问题。
没有简单的解决方法。程序中很有可能需要-mfpu=neon
的{{1}}选项,并且有人猜测您在其他编译器上会需要什么。