CMAKE separater Linker und Compiler-Flags
Recht jetzt mein toolchain.cmake
sieht loke dies:
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")
Das problem ist, dass CMake geht der Linker zusätzlich die Compiler-flags! Gibt es eine Möglichkeit, zu trennen, diese beiden?
Etwas anderes ist, wenn ich eine andere compiler-tool-chain (Wie Fujitsu Softtune) wie kann ich feststellen, CMake explizit zu nehmen, ein Linker und nicht der compiler Objekte Verknüpfen?
Dank
Damit ich endlich gelöst. für evryone anderen mit dem gleichen problem, habe ich geändert CMakelists wie folgt:
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>")
und es funktioniert einwandfrei...
wo ${LD_FLAGS_STR}
ist nur die Liste der mein linker flags (eigene variable). und LNK907S.EXE
ist der name von Linker-ich 'm mit (Fujitsu).
- Hier die Antwort scheint zu erfordern, Projekt-spezifischen Einstellungen. Ich habe die gleiche Frage, und würde lieber nicht haben, wiederholen Sie diese Einstellungen auf jede der Dutzend Bibliotheken und binaries, die ich versuche zu bauen.
- Hallo, ich von Ihnen positiv bewertet werden. Ich Stand vor dem gleichen problem. Die einzige Frage die ich habe ist, Sie müssen Projekt-spezifische Einstellungen. Es wäre toll, wenn du posten könntest, was die ${LD_FLAGS_STR} sind, und was das <TARGET><LINK_FLAGS><OBJEKTE> sind. Da möchte ich auch reduzieren /löschen der noch nicht genutzte Teil von meinem code
Du musst angemeldet sein, um einen Kommentar abzugeben.
Versuchen Sie es mit
SET_TARGET_PROPERTIES
um die link-flags:Hier bin ich davon ausgegangen, Ihre ausführbaren heißt "FOO". Beachten Sie, dass der link libaries sind auf eine pro-Ziel-Grundlage. Wenn Sie brauchen eine spezielle compiler-flags für die Zielgruppe, die Sie verwenden können
COMPILE_FLAGS
imSET_TARGET_PROPERTIES
als gut.SET_COMPILE_FLAG
Sie könnten versuchen, dieCOMPILE_FLAGS
optionSET_TARGET_PROPERTIES
. Möglicherweise erhalten Sie einige echte Differenzierung zwischen compiler und linker.SET
. Ich änderte den code zuSET
. Es muss schon spät, als ich schrieb diese Antwort (ich hatte auch die blöde Bemerkung über SET_COMPILE_FLAG!).