Я использую cmake для компиляции своего проекта для arm cortex m3 (arm-none-eabi-).

Я хотел бы добавить следующие параметры:

1.) компоновщик должен сгенерировать файл .map двоичного файла.

2.) make (Unix Makefiles) должен хранить предупреждения и ошибки в отдельном файле в дополнение к stderr /stdout, что я сейчас вижу.

3.) config "set(CMAKE_EXE_LINKER_FLAGS" -specs = nano.specs -Wl, - gc-section -o myproject.elf "CACHE INTERNAL" ")" не генерирует мой эльф, поэтому я вручную копирую вывод в вывод .elf.

может ли кто-нибудь помочь мне здесь? Кроме того, если вы, ребята, имеете большой опыт, было бы здорово, если бы вы могли дать мне несколько советов о том, что можно сделать лучше. в настоящее время я запускаю cmake на windows10 (gnu make, cmake, git bash) и на linux mint.

compile.sh

cmake \
-G "Unix Makefiles" \
-D CMAKE_BUILD_TYPE=Debug \
..
make -j8

cmake_arm_none_eabi.cmake

set(CMAKE_SYSTEM_NAME Generic)
set(CMAKE_SYSTEM_PROCESSOR arm)

set(CMAKE_ASM_COMPILER arm-none-eabi-gcc)
set(CMAKE_C_COMPILER arm-none-eabi-gcc)
set(CMAKE_CXX_COMPILER arm-none-eabi-g++)

set(CMAKE_EXE_LINKER_FLAGS "-specs=nano.specs -Wl,--gc-sections -o myproject.elf" CACHE INTERNAL "")

set(CMAKE_ASM_COMPILER_ID GNU)
set(CMAKE_C_COMPILER_ID GNU)
set(CMAKE_CXX_COMPILER_ID GNU)

set(CMAKE_ASM_COMPILER_FORCED TRUE)
set(CMAKE_C_COMPILER_FORCED TRUE)
set(CMAKE_CXX_COMPILER_FORCED TRUE)

CMakeLists.txt

include("cmake_arm_none_eabi.cmake")

cmake_minimum_required(VERSION 3.10.1)

project(myproject)

ENABLE_LANGUAGE(ASM)

SET(CMAKE_ASM_FLAGS "${CFLAGS} -x assembler-with-cpp")

set(LINKER_SCRIPT "mylinker.ld")

set(CPU_OPTIONS -mthumb -mcpu=cortex-m3)

SET(CMAKE_ASM_FLAGS_DEBUG "-g")
set(CMAKE_C_FLAGS_DEBUG "-Og -g -DDEBUG")
set(CMAKE_CXX_FLAGS_DEBUG "-Og -g")

add_compile_options(
    ${CPU_OPTIONS}
    $<$<COMPILE_LANGUAGE:C>:-std=gnu11> #c11>
    $<$<COMPILE_LANGUAGE:CXX>:-std=gnu++17> #c++17>
    #$<$<COMPILE_LANGUAGE:CXX>:-fms-extensions>
    $<$<COMPILE_LANGUAGE:CXX>:-fno-exceptions>
    $<$<COMPILE_LANGUAGE:CXX>:-fno-rtti>
    $<$<COMPILE_LANGUAGE:CXX>:-fno-use-cxa-atexit>
    $<$<COMPILE_LANGUAGE:CXX>:-fno-threadsafe-statics>
    $<$<COMPILE_LANGUAGE:CXX>:-Wswitch-default>
    $<$<COMPILE_LANGUAGE:CXX>:-Wswitch-enum>
    $<$<COMPILE_LANGUAGE:CXX>:-Wmissing-include-dirs>
    -fstrict-volatile-bitfields
    -ffunction-sections
    -fdata-sections
    -fno-threadsafe-statics
    -fdce

    -Wfatal-errors
    -Wall
    -Wextra
    -Wcast-align
    -Wconversion
    -Wsign-conversion
    -Wold-style-cast
    -Wshadow
    -Wlogical-op
    -Wsuggest-override
    -Wsuggest-final-types
    -Wsuggest-final-methods
    -pedantic
)

include_directories(
    ${CMAKE_SOURCE_DIR}
)

link_directories(
    ${CMAKE_SOURCE_DIR}
)

add_executable(${PROJECT_NAME}
    mysource.c
    mysource2.cpp
    ...

target_link_libraries(${PROJECT_NAME}
    ${CPU_OPTIONS}
    -T${LINKER_SCRIPT}
    -nostartfiles
    m #libm
    gcc #libgcc
)

set_property(TARGET ${PROJECT_NAME} PROPERTY LINK_DEPENDS ${CMAKE_SOURCE_DIR}/${LINKER_SCRIPT})

0