与 CLION、CMAKE、WSL 和自定义 Angstrom 工具链交叉编译 - "CLION TEST"期间的问题

Crosscompile with CLION, CMAKE, WSL and custom Angstrom toolchain - Problems during "CLION TEST"

本文关键字:CLION TEST 问题 交叉编译 工具 WSL CMAKE 自定义 Angstrom      更新时间:2023-10-16

TL;博士:

尝试使用 CMake、自定义工具链(埃)和 CLion 编译 helloworld。编译器无法运行测试。CMAKE_TRY_COMPILE_TARGET_TYPE设置"STATIC_LIBRARY"。

你好

Clion的新手,vim,make和c++的旧内容。

我有这个微控制 http://www.microcontrol.net/index.php?id=554 的μCAN板

在 uri 的下方,您可以下载 μMIC.100 ARM C/C++ Compiler für Linux (ZIP)。

  • 已下载、解压缩并安装到/usr/local/angstrom。/
    • 将其安装在 Windows Subsystemfor Linux 的 UBUNTU 中
  • 已安装的 CLION 19.1.4
    • 为 CLION 设置 WSL 工具链,以便通过 ssh 连接到我的 WSL Ubuntu
    • 自定义 CLion 属性: idea.case.sensitive.fs=true
  • 通过 ftp 部署到我的 μ控制器。

创建了简单的CMakeLists.txt 应该创建一个简单的二进制文件以在目标上运行

不行...

CMakeLists.txt:

cmake_minimum_required(VERSION 3.10)
set(CMAKE_TRY_COMPILE_TARGET_TYPE "STATIC_LIBRARY")
set(CMAKE_TOOLCHAIN_FILE toolchain.cmake)
SET(CMAKE_TRY_COMPILE_TARGET_TYPE STATIC_LIBRARY)
project(helloDrive)
set(CMAKE_CXX_STANDARD 11)
add_executable(helloDrive main.cpp)

工具链.cmake:

set(CMAKE_SYSTEM_NAME Linux)
set(CMAKE_SYSTEM_PROCESSOR arm)
set(tools /usr/local/angstrom/arm)
set(CMAKE_C_COMPILER ${tools}/bin/arm-angstrom-linux-gnueabi-gcc)
set(CMAKE_CXX_COMPILER ${tools}/bin/arm-angstrom-linux-gnueabi-gcc)
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY)
/usr/bin/cmake -DCMAKE_BUILD_TYPE=Debug -DCMAKE_MAKE_PROGRAM=/usr/bin/make -DCMAKE_C_COMPILER=/usr/local/angstrom/arm/bin/arm-angstrom-linux-gnueabi-gcc -DCMAKE_CXX_COMPILER=/usr/local/angstrom/arm/bin/arm-angstrom-linux-gnueabi-cpp -D CMAKE_CXX_COMPILER=/usr/local/angstrom/arm/bin/arm-angstrom-linux-gnueabi-g++ -G "CodeBlocks - Unix Makefiles" /home/xyc/helloDrive
-- The C compiler identification is unknown
-- The CXX compiler identification is unknown
-- Check for working C compiler: /usr/local/angstrom/arm/bin/arm-angstrom-linux-gnueabi-gcc
-- Check for working C compiler: /usr/local/angstrom/arm/bin/arm-angstrom-linux-gnueabi-gcc -- broken
CMake Error at /usr/share/cmake-3.10/Modules/CMakeTestCCompiler.cmake:52 (message):
The C compiler
"/usr/local/angstrom/arm/bin/arm-angstrom-linux-gnueabi-gcc"
is not able to compile a simple test program.
It fails with the following output:
Change Dir: /home/xyc/helloDrive/cmake-build-debugtoolchain/CMakeFiles/CMakeTmp
Run Build Command:"/usr/bin/make" "cmTC_a8ba2/fast"
/usr/bin/make -f CMakeFiles/cmTC_a8ba2.dir/build.make CMakeFiles/cmTC_a8ba2.dir/build
make[1]: Entering directory '/home/xyc/helloDrive/cmake-build-debugtoolchain/CMakeFiles/CMakeTmp'
Building C object CMakeFiles/cmTC_a8ba2.dir/testCCompiler.c.o
/usr/local/angstrom/arm/bin/arm-angstrom-linux-gnueabi-gcc    -o CMakeFiles/cmTC_a8ba2.dir/testCCompiler.c.o   -c /home/xyc/helloDrive/cmake-build-debugtoolchain/CMakeFiles/CMakeTmp/testCCompiler.c
/usr/local/angstrom/arm/bin/arm-angstrom-linux-gnueabi-gcc: 15: /usr/local/angstrom/arm/bin/arm-angstrom-linux-gnueabi-gcc: Syntax error: ")" unexpected
CMakeFiles/cmTC_a8ba2.dir/build.make:65: recipe for target 'CMakeFiles/cmTC_a8ba2.dir/testCCompiler.c.o' failed
make[1]: *** [CMakeFiles/cmTC_a8ba2.dir/testCCompiler.c.o] Error 2
make[1]: Leaving directory '/home/xyc/helloDrive/cmake-build-debugtoolchain/CMakeFiles/CMakeTmp'
Makefile:126: recipe for target 'cmTC_a8ba2/fast' failed
make: *** [cmTC_a8ba2/fast] Error 2


CMake will not be able to correctly generate this project.
Call Stack (most recent call first):
CMakeLists.txt:6 (project)

-- Configuring incomplete, errors occurred!
See also "/home/xyc/helloDrive/cmake-build-debugtoolchain/CMakeFiles/CMakeOutput.log".
See also "/home/xyc/helloDrive/cmake-build-debugtoolchain/CMakeFiles/CMakeError.log".
You have changed variables that require your cache to be deleted.
Configure will be re-run and you may have to reset some variables.
The following variables have changed:
CMAKE_CXX_COMPILER= /usr/local/angstrom/arm/bin/arm-angstrom-linux-gnueabi-g++
CMake Error: Error required internal CMake variable not set, cmake may not be built correctly.
Missing variable is:
CMAKE_MAKE_PROGRAM
-- Generating done
-- Build files have been written to: /home/xyc/helloDrive/cmake-build-debugtoolchain
[Failed to reload]

所以我找到了一个解决方案:

#toolchain.cmake
set(CMAKE_SYSTEM_NAME Linux)
set(CMAKE_SYSTEM_PROCESSOR arm)
set(tools /usr/local/angstrom/arm/bin)
set(MY_CROSS_prefix "arm-angstrom-linux-gnueabi-")
set(CMAKE_C_COMPILER ${tools}/arm-angstrom-linux-gnueabi-gcc)
set(CMAKE_CXX_COMPILER ${tools}/arm-angstrom-linux-gnueabi-g++)
SET(CMAKE_LINKER ${tools}/${MY_CROSS_prefix}ld)
set(CMAKE_AR ${tools}/${MY_CROSS_prefix}ar)
set(CMAKE_AR ${tools}/bin/arm-angstrom-linux-gnueabi-ar)

set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY)
SET(GCC_COVERAGE_COMPILE_FLAGS "-DCAN4LINUX_MAJOR=91 -DDNP9265 -DBFIN -Wpmf-conversions")
SET(GCC_COVERAGE_LINK_FLAGS "-Wpmf-conversions")
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${GCC_COVERAGE_COMPILE_FLAGS}")
SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${GCC_COVERAGE_LINK_FLAGS}")

子 Cmake

cmake_minimum_required(VERSION 3.0)
#set(CMAKE_TOOLCHAIN_FILE "../../cmake/toolchain.cmake")
project(driveMMA.app CXX)
file(GLOB CPP_FILES *.cpp)
MESSAGE("Working Folder: " $ENV{WORKING_FOLDER})
include_directories($ENV{WORKING_FOLDER}/include)
set(CMAKE_CXX_STANDARD 98)
set(CMAKE_GENERATOR "UNIX MAKEFILES")
set(CMAKE_TOOLCHAIN_FILE "cmake/toolchain.cmake")
target_link_libraries(${PROJECT_NAME} ${CMAKE_THREAD_LIBS_INIT} ${PROC_LIBS})
install(TARGETS ${PROJECT_NAME}
DESTINATION /home/code/thesis/apps/
CONFIGURATIONS hg55
RUNTIME DESTINATION bin
LIBRARY DESTINATION lib
ARCHIVE DESTINATION lib
)

顶级

cmake_minimum_required(VERSION 3.0)
set (CMAKE_CXX_STANDARD 98)
set(CMAKE_GENERATOR "UNIX MAKEFILES")
set(CMAKE_TOOLCHAIN_FILE "cmake/toolchain.cmake")
set(CMAKE_DISABLE_IN_SOURCE_BUILD ON)
set(CMAKE_DISABLE_SOURCE_CHANGES ON)
set(CMAKE_INSTALL_PREFIX "/home/code/thesis")
if ("${CMAKE_SOURCE_DIR}" STREQUAL "${CMAKE_BINARY_DIR}")
message(SEND_ERROR "In-source builds are not allowed.")
endif ()
set(CMAKE_VERBOSE_MAKEFILE ON)
set(CMAKE_COLOR_MAKEFILE   ON)
# Remove 'lib' prefix for shared libraries on Windows
if (WIN32)
set(CMAKE_SHARED_LIBRARY_PREFIX "")
endif ()
MESSAGE(${CMAKE_C_COMPILER}n${CMAKE_CXX_COMPILER}n${CMAKE_LINKER}n${CMAKE_AR}n "Installing in: " ${CMAKE_INSTALL_PREFIX})

add_subdirectory(components/executable_drive) # Executable (depends on A and C)