2017-04-03 448 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