TL; DR:
尝试使用CMake,自定义工具链(埃)和CLion编译helloworld。编译器无法运行测试。 CMAKE_TRY_COMPILE_TARGET_TYPE设置为“ STATIC_LIBRARY”。
你好,
Clion的新手,vim的旧手,make和c ++。
我有Microcontrol http://www.microcontrol.net/index.php?id=554的µCAN板
您还可以在uri中下载适用于Linux(ZIP)的µMIC.100 ARM C / C ++编译器。
创建了简单的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]
答案 0 :(得分:0)
我发现了一个解决方案:
#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_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)