繁体   English   中英

使用CLION,CMAKE,WSL和自定义Angstrom工具链进行交叉编译 - “CLION TEST”期间的问题

[英]Crosscompile with CLION, CMAKE, WSL and custom Angstrom toolchain - Problems during “CLION TEST”

TL; DR:

尝试使用CMake,自定义工具链(angstrom)和CLion编译helloworld。 编译器无法运行测试。 设置了CMAKE_TRY_COMPILE_TARGET_TYPE“STATIC_LIBRARY”。

你好,

Clion的新手,老的vim,make和c ++。

我有来自Microcontrol的μCAN板http://www.microcontrol.net/index.php?id=554

在uri中,您可以下载μMIC.100ARMC / C ++编译器(Linux)。

  • 下载,解压缩并安装到/usr/local/angstrom../
    • 在WindowsSubsystemforLinux中的UBUNTU中安装它
  • 已安装CLION 19.1.4
    • 设置CLION的WSL工具链以通过ssh连接到我的WSL Ubuntu
    • 自定义CLion属性:idea.case.sensitive.fs = true
  • 通过ftp部署到我的μController。

创建简单的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)

toolchain.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}")

subCmake

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)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM