CMake выполняет архиватор для каждого объекта в отдельности - PullRequest
0 голосов
/ 19 сентября 2019

Я хочу создать библиотеку с архиватором (из arduino, esp8266) в cmake.

add_library(arduino_core STATIC ${CORE_ASM_ITEMS} ${CORE_C_ITEMS} ${CORE_CXX_ITEMS})

Эти параметры я установил, особенно CMAKE_AR

set(CMAKE_C_COMPILER "${TOOLCHAIN_BIN}/${TARGET_TRIPLET}-gcc${SYSTEM_EXTENSION}")
set(CMAKE_CXX_COMPILER "${TOOLCHAIN_BIN}/${TARGET_TRIPLET}-g++${SYSTEM_EXTENSION}")
set(CMAKE_ASM_COMPILER "${TOOLCHAIN_BIN}/${TARGET_TRIPLET}-gcc${SYSTEM_EXTENSION}")
set(CMAKE_AR "${TOOLCHAIN_BIN}/${TARGET_TRIPLET}-ar${SYSTEM_EXTENSION}")

SET(CMAKE_CXX_ARCHIVE_CREATE "<CMAKE_AR> cru <TARGET> <LINK_FLAGS> <OBJECTS>")
SET(CMAKE_C_ARCHIVE_CREATE "<CMAKE_AR> cru <TARGET> <LINK_FLAGS> <OBJECTS>")

Если ясоберите эту библиотеку с помощью make, она выполнит:

/Users/XXX/Library/Arduino15/packages/esp8266/tools/xtensa-lx106-elf-gcc/2.5.0-3-20ed2b9/bin/xtensa-lx106-elf-ar cru libarduino_core.a  CMakeFiles/arduino_core.dir/Users/XXX/Library/Arduino15/packages/esp8266/hardware/esp8266/2.5.0/cores/esp8266/cont.S.o CMakeFiles/arduino_core.dir/Users/XXX/Library/Arduino15/packages/esp8266/hardware/esp8266/2.5.0/cores/esp8266/StackThunk.c.o

и еще много объектов в конце (около 60).Но я думаю, что архиватор не хочет этот синтаксис.Если я свяжу эту собранную библиотеку в конце, она завершится неудачно из-за неопределенных ссылок.

Но если я собрал библиотеку вручную, предоставив каждому объекту собственное выполнение архиватора, как показано ниже, связывание библиотеки наконец успешен.

/Users/XXX/Library/Arduino15/packages/esp8266/tools/xtensa-lx106-elf-gcc/2.5.0-3-20ed2b9/bin/xtensa-lx106-elf-ar cru libarduino_core.a CMakeFiles/arduino_core.dir/Users/XXX/Library/Arduino15/packages/esp8266/hardware/esp8266/2.5.0/cores/esp8266/cont.S.o
/Users/XXX/Library/Arduino15/packages/esp8266/tools/xtensa-lx106-elf-gcc/2.5.0-3-20ed2b9/bin/xtensa-lx106-elf-ar cru libarduino_core.a CMakeFiles/arduino_core.dir/Users/XXX/Library/Arduino15/packages/esp8266/hardware/esp8266/2.5.0/cores/esp8266/StackThunk.c.o
...

Итак, мой вопрос: есть ли какая-либо опция CMake, например, для ограничения количества данных объектов?Или что-нибудь подобное?

...