首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在编译riscv64时出现cmake错误-未知-elf-g++

如何在编译riscv64时出现cmake错误-未知-elf-g++
EN

Stack Overflow用户
提问于 2020-07-06 03:47:33
回答 1查看 253关注 0票数 0

当我调用cmake ..时,错误如下所示。从终端执行以下操作:

代码语言:javascript
复制
(base) k:~ cd /Users/yuli/Documents/version3/cpp/
(base) k:~ ls
CMakeLists.txt      src
riscv-gnu-toolchain test
(base) k:~ mkdir build
(base) k:~ cd build
(base) k:~ cmake ..
-- The C compiler identification is AppleClang 11.0.3.11030032
-- The CXX compiler identification is AppleClang 11.0.3.11030032
-- Check for working C compiler: /Library/Developer/CommandLineTools/usr/bin/cc
-- Check for working C compiler: /Library/Developer/CommandLineTools/usr/bin/cc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Detecting C compile features
-- Detecting C compile features - done
-- Check for working CXX compiler: /Library/Developer/CommandLineTools/usr/bin/c++
-- Check for working CXX compiler: /Library/Developer/CommandLineTools/usr/bin/c++ -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Detecting CXX compile features
-- Detecting CXX compile features - done
RegularExpression::compile(): Nested *?+.
RegularExpression::compile(): Error in compile.
CMake Error at CMakeLists.txt:10 (if):
  if given arguments:

    "/Library/Developer/CommandLineTools/usr/bin/c++" "MATCHES" ".*riscv64-unknown-elf-g++"

  Regular expression ".*riscv64-unknown-elf-g++" cannot compile


-- Configuring incomplete, errors occurred!
See also "/Users/yuli/Documents/version3/cpp/build/CMakeFiles/CMakeOutput.log".

我尝试了"STREQUAL“而不是MATCHES,但不起作用。知道这里可能出了什么问题吗?

CMakeLists.txt如下所示:

代码语言:javascript
复制
cmake_minimum_required(VERSION 3.13)
project(ofdmchain)

set(CMAKE_CXX_FLAGS "-std=c++14")

add_definitions(-DCOMPILES_ON_PC -Wall -Wextra)

configure_file(${CMAKE_SOURCE_DIR}/src/config.hpp.in ${CMAKE_BINARY_DIR}/config.hpp)

if("${CMAKE_CXX_COMPILER}" MATCHES ".*riscv64-unknown-elf-g++")
  message(STATUS "Compiling RISCV")
  SET(RISCV 1)
else()
  message(STATUS "Compiling X86")
  SET(RISCV 0)
endif()

add_library(ofdm
  src/transmitter.cpp
  src/configuration.cpp

  src/ofdm.hpp
  src/datatypes.hpp
  )
target_include_directories(ofdm PRIVATE ${CMAKE_SOURCE_DIR}/../reference_matlab)
target_include_directories(ofdm PRIVATE ${CMAKE_SOURCE_DIR}/src/)

if (NOT ${RISCV})
  add_executable(unit_tests
    test/catch_main.cpp
    test/test_sanity.cpp
    test/test_utilities.cpp
    test/test_transmitter.cpp
    )
  target_include_directories(unit_tests PUBLIC ${CMAKE_CURRENT_BINARY_DIR})
  target_include_directories(unit_tests PUBLIC ${CMAKE_SOURCE_DIR}/src)
  target_link_libraries(unit_tests ofdm)
endif()

我还尝试在g++存在的地方以及存在的地方添加++。也有疲倦的"STREQUAL“而不是"MATCHES”,它也不起作用。这可能是路径中的c++问题?

EN

回答 1

Stack Overflow用户

发布于 2020-07-06 16:56:11

CMake“内部错误”

代码语言:javascript
复制
RegularExpression::compile(): Nested *?+.

是关于最后两个+字符:在正则表达式中,这样的字符有特殊的含义。

使+字符(和其他特殊字符)按字面处理的方法

使用\对角色进行

  1. Escape。注意,转义字符本身应该在CMake字符串中进行转义,因此您需要将其写入两次:

如果(“${CMAKE_CXX_COMPILER}”与".*riscv64-unknown-elf-g\+\+")匹配

  1. 将字符放入方括号 ([])中。在[]中,所有特殊字符都失去了其特殊含义:

如果(“${CMAKE_CXX_COMPILER}”与".*riscv64-unknown-elf-g+")匹配

还要注意,在某些if条件下,不需要显式地取消对变量的引用: CMake自己完成。

因此,可以写成

代码语言:javascript
复制
if(CMAKE_CXX_COMPILER MATCHES ".*riscv64-unknown-elf-g[+][+]")

if命令的documentation中可以看到更多信息。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62745621

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档