Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
CMake分别为每个对象执行archiver_Cmake_Unix Ar - Fatal编程技术网

CMake分别为每个对象执行archiver

CMake分别为每个对象执行archiver,cmake,unix-ar,Cmake,Unix Ar,我想在cmake中创建一个具有archiver(来自arduino,esp8266)的库 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_

我想在cmake中创建一个具有archiver(来自arduino,esp8266)的库

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>")

最后还有更多的物体(大约60个)。但我认为档案管理员不需要这种语法。如果我在最后链接这个构建的库,它会因为未定义的引用而失败

但是,如果我手动构建库,给每个对象一个自己的archiver执行,如下面所示,那么最后的库链接是成功的

/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选项来限制给定对象的数量?或者类似的东西?

“但我认为存档者不需要这种语法。”-对于存档者来说,使用多个对象文件的语法应该是完美的。“未定义引用”的原因可能在其他地方。@Tsyvarev是的,好吧,你是对的,这是我的错。发现在这个库构建之后,cmake会自动从操作系统执行“ranlib”,这会破坏库。我把“CMAKE_RANLIB”改成了右二进制。
/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
...