2017-04-03 374 views
2

根据我对cmake的理解,该工具负责管理文件路径和命令行长度,以避免达到8191个字符的窗口限制。Cmake命令行太长windows

但是我在Windows上用arm_none_eabi进行交叉编译,cmake不会使用响应文件或任何其他解决方法来生成makefile以获取路径长度。因此链接步骤失败。

这里是引起问题

XXXXX_EXTERNAL_OBJECTS = 
XXXX_OBJECTS = \ 
"file1.c.obj" \ 
"file2.c.obj" \ 
"file3.c.obj" \ 
"fileXX.c.obj" \ 

C:/YYYY/GNU_Tools_ARM_Embedded/6-2016-q4-major/bin/arm-none-eabi-gcc.exe -mcpu=cortex-m4 -mthumb -DSTM32L4__xx -mfloat-abi=softfp -DXXXX -O0 -g -Wfatal-errors -Wall -Wno-unused-function -std=c99 -fdata-sections -ffunction-sections -mcpu=cortex-m4 -march=armv7e-m -O0 -g --specs=nano.specs -mthumb -Wl,--gc-sections -nostartfiles -Wl,[email protected] -TC:SSSSSSSSS/STM32L4__RGTx_FLASH.ld $(XXXX_OBJECTS) $(XXXXX_EXTERNAL_OBJECTS) -o outHexFile_XXXX -LC:/YYYYYYYYYYYYYYYY/arm-nano-eabi/lib 

最后一行长度为约23000个字符(远超过8191)所生成的生成文件线。

为什么Cmake没有生成可用于Windows的生成文件? 这只是因为我在交叉编译? 我能做些什么来避免这个问题?

EDIT

发生器是GNU生成文件

CMake的版本3.7.2

编辑2

这可能在将来的版本被自动处理

submited bug

+0

我有同样的proble m和我有一个解决方案,它依赖于makefile生成器,例如忍者你正在使用和CMake版本。您能否将这些信息添加到您的问题中? – Florian

+0

@florian OK Cmake的GNU makefile 3.7.2 – Julien

回答

4

谈到我的意见为答案

我有命令行的长度相同的问题,并可能与添加下面的“使用响应文件”设置我的工具链文件,解决这个问题:

SET(CMAKE_C_USE_RESPONSE_FILE_FOR_OBJECTS 1) 
SET(CMAKE_CXX_USE_RESPONSE_FILE_FOR_OBJECTS 1) 

SET(CMAKE_C_RESPONSE_FILE_LINK_FLAG "@") 
SET(CMAKE_CXX_RESPONSE_FILE_LINK_FLAG "@") 

如果你曾经使用已经ninja您将需要一个额外的:

SET(CMAKE_NINJA_FORCE_RESPONSE_FILE 1 CACHE INTERNAL "") 
+0

这可以工作,但对我来说这仍然是一个cmake。该工具应该自行检测限制。我认为这个错误只存在于这个特殊的交叉编译案例中 – Julien