2013-05-16 5 views
2

Сейчас моя toolchain.cmake выглядит лок это:Cmake отдельного компоновщик и компилятор Флаги

CMAKE_FORCE_C_COMPILER(arm-none-eabi-gcc GNU) 
CMAKE_FORCE_CXX_COMPILER(arm-none-eabi-gcc GNU) 
SET(CMAKE_ASM_COMPILER arm-none-eabi-as) 
SET(CMAKE_OBJCOPY arm-none-eabi-objcopy CACHE INTERNAL "objcopy" FORCE) 
SET(CMAKE_OBJDUMP arm-none-eabi-objdump CACHE INTERNAL "objdump" FORCE) 

# Compiler Flags 
SET(MCU_FLAGS "-mcpu=cortex-m3 -mthumb") 
SET(CMAKE_BUILD_FLAGS "-O2 -g -mfpu=vfp -mfloat-abi=soft -Wa,-meabi=5 -ffunction-sections -fno-common -pedantic -Wall -Wextra -Wno-missing-field-initializers") 
SET(CMAKE_C_FLAGS "${MCU_FLAGS} ${CMAKE_BUILD_FLAGS}" CACHE INTERNAL "c compiler flags") 
SET(CMAKE_CXX_FLAGS ${CMAKE_C_FLAGS} CACHE INTERNAL "cxx compiler flags") 
SET(CMAKE_ASM_FLAGS "-g -mcpu=cortex-m3 -mthumb -mfpu=vfp -mfloat-abi=soft -meabi=5 -warn" CACHE INTERNAL "asm compiler flags") 

SET(CMAKE_EXE_LINKER_FLAGS "-mcpu=cortex-m3 -mthumb -Wall -Wextra -Wno-missing-field-initializers -g -nostartfiles -Wl,-T1.ld,-M=1.map,--gc-sections" CACHE INTERNAL "exe link flags") 

Проблема заключается в том, что CMake переходит к Linker дополнителен компилятору флагам! Есть ли способ отделить эти два?

Другое дело, если я использую другую цепочку инструментов-компиляторов (например, Fujitsu Softtune), как я могу сказать CMake явно использовать Linker, а не компилятор для привязки объектов?

Благодаря


Так я наконец-то решил. для evryone еще с той же проблемой, я изменил CMakelists следующим образом:

add_executable(${PROJECT_NAME} ${PROJECT_SOURCES}) 
SET_TARGET_PROPERTIES(${PROJECT_NAME} PROPERTIES LINKER_LANGUAGE C CXX ASM) 
SET_TARGET_PROPERTIES(${PROJECT_NAME} PROPERTIES LINK_FLAGS "${LD_FLAGS_STR} -m ${PROJECT_NAME}.map") 
set(CMAKE_C_LINK_EXECUTABLE "FLNK907S.EXE -o <TARGET> <LINK_FLAGS> <OBJECTS>") 

и она отлично работает ...

где ${LD_FLAGS_STR} это только список моих флагов компоновщика (собственная переменная). и LNK907S.EXE - это имя Linker i 'm using (Fujitsu).

+2

Здесь, как представляется, здесь требуются конкретные настройки проекта. У меня такая же общая проблема, и вам больше не придется повторять эти настройки в каждой из десятков библиотек и двоичных файлов, которые я пытаюсь создать. –

+0

Привет, я поддержал. Я столкнулся с той же проблемой. Единственный вопрос, который у меня есть, - у вас есть конкретные настройки проекта. Было бы здорово, если бы вы могли опубликовать, что такое $ {LD_FLAGS_STR}, и что такое . Поскольку я также хочу уменьшить/удалить неиспользованную часть моего кода –

ответ

1

Попробуйте использовать SET_TARGET_PROPERTIES установить ссылку флаги, соответственно:

SET(MCU_FLAGS "-mcpu=cortex-m3 -mthumb") 
SET(CMAKE_BUILD_FLAGS "-O2 -g -mfpu=vfp -mfloat-abi=soft -Wa,-meabi=5 -ffunction-sections -fno-common -pedantic -Wall -Wextra -Wno-missing-field-initializers") 
SET(CMAKE_C_FLAGS "${MCU_FLAGS} ${CMAKE_BUILD_FLAGS}") 
SET(CMAKE_CXX_FLAGS ${CMAKE_C_FLAGS}) 
SET(CMAKE_ASM_FLAGS "-g -mcpu=cortex-m3 -mthumb -mfpu=vfp -mfloat-abi=soft -meabi=5 -warn") 
SET_TARGET_PROPERTIES(FOO PROPERTIES LINK_FLAGS "-mcpu=cortex-m3 -mthumb -Wall -Wextra -Wno-missing-field-initializers -g -nostartfiles -Wl,-T1.ld,-M=1.map,--gc-sections") 

Здесь, я предположил, что ваш excutable называется "Foo". Обратите внимание, что библиотеки ссылок указаны для каждой цели. Если вам нужны специальные флаги компилятора только для цели, вы можете использовать COMPILE_FLAGS в SET_TARGET_PROPERTIES.

+0

, я изменил CMakeLists, как вы сказали, но проблема все еще там. cmake call alway один и тот же компилятор для компиляции и привязки почти с теми же флагами !!!! до тех пор, пока я компилирую и связываюсь с gcc, нет проблем, но компилятор и компоновщик fujitsu полностью отличаются (с разными флагами) !! –

+2

его действительно разочаровывает, нет хорошей документации для cmake :( –

+0

В ответ на ваш первый комментарий, если вместо использования 'SET_COMPILE_FLAG' вы можете попробовать опцию' COMPILE_FLAGS' для 'SET_TARGET_PROPERTIES'. Это может привести к некоему истинному дифференцированию между компилятором и linker. – SethMMorton

Смежные вопросы