我想通過CMAKE使用CMAKE在Windows中運行Arduino編譯器。我創建了一個.cmake
文件,可以找到並覆蓋一些工具鏈變量,如CMAKE_C_COMPILER
。這對Linux很有用。一切都在發現和建立。在Linux中,我使用UNIX Makefiles生成器。如何更改C編譯器而不是以cl.exe開關結束?
但是,當我回到Windows時,我遇到了問題。我想讓NMake和Visual Studio生成器都能正常工作。如果讓我選一個,我會去與最不復雜(NMAKE)
的NMAKE生成器上添加命令行開關堅持爲cl.exe時(/ NOLOGO,/ DWIN32等),這些創建錯誤,停止構建。
NMake生成器確實使用arduino編譯器的路徑。 (好)
在Visual Studio生成堅持使用cl.exe時(差)和它把進入命令行開關cl.exe時(壞)
如何阻止它加入cl.exe命令行切換?
的代碼看起來是這樣的:
set(TOOLCHAIN_ROOT "C:\Program Files (x86)\Arduino\hardware\tools\arm")
if(WIN32)
set(TOOL_OS_SUFFIX .exe)
else(WIN32)
set(TOOL_OS_SUFFIX)
endif(WIN32)
set(CMAKE_SYSTEM_NAME Generic)
set(CMAKE_SYSTEM_PROCESSOR arm)
set(CMAKE_CROSSCOMPILING 1)
set(CMAKE_C_COMPILER "${TOOLCHAIN_ROOT}/bin/${TRIPLE}-gcc${TOOL_OS_SUFFIX}")
set(CMAKE_CXX_COMPILER "${TOOLCHAIN_ROOT}/bin/${TRIPLE}-g++${TOOL_OS_SUFFIX}")
set(CMAKE_AR "${TOOLCHAIN_ROOT}/bin/${TRIPLE}-ar${TOOL_OS_SUFFIX}")
set(CMAKE_LINKER "${TOOLCHAIN_ROOT}/bin/${TRIPLE}-ld${TOOL_OS_SUFFIX}")
set(CMAKE_NM "${TOOLCHAIN_ROOT}/bin/${TRIPLE}-nm${TOOL_OS_SUFFIX}")
set(CMAKE_OBJCOPY "${TOOLCHAIN_ROOT}/bin/${TRIPLE}-objcopy${TOOL_OS_SUFFIX}")
set(CMAKE_OBJDUMP "${TOOLCHAIN_ROOT}/bin/${TRIPLE}-objdump${TOOL_OS_SUFFIX}")
set(CMAKE_STRIP "${TOOLCHAIN_ROOT}/bin/${TRIPLE}-strip${TOOL_OS_SUFFIX}")
set(CMAKE_RANLIB "${TOOLCHAIN_ROOT}/bin/${TRIPLE}-ranlib${TOOL_OS_SUFFIX}")
這裏是輸出的樣子:
Scanning dependencies of target MyProject
[ 2%] Building C object CMakeFiles/MyProject.dir/main.c.obj
arm-none-eabi-gcc.exe: error: /nologo: No such file or directory
arm-none-eabi-gcc.exe: error: /DWIN32: No such file or directory
arm-none-eabi-gcc.exe: error: /D_WINDOWS: No such file or directory
arm-none-eabi-gcc.exe: error: /W3: No such file or directory
arm-none-eabi-gcc.exe: error: /D_DEBUG: No such file or directory
arm-none-eabi-gcc.exe: error: /MDd: No such file or directory
arm-none-eabi-gcc.exe: error: /Zi: No such file or directory
arm-none-eabi-gcc.exe: error: /Ob0: No such file or directory
arm-none-eabi-gcc.exe: error: /Od: No such file or directory
arm-none-eabi-gcc.exe: error: /RTC1: No such file or directory
arm-none-eabi-gcc.exe: error: /FoCMakeFilesMyProject.dirmain.c.obj: No such file or directory
arm-none-eabi-gcc.exe: error: /FdCMakeFilesMyProject.dir -c: No such
file or directory
arm-none-eabi-gcc.exe: error: D:projectsexamplecode.c: No such file or directory
arm-none-eabi-gcc.exe: fatal error: no input files
compilation terminated.
如何'cmake'與Visual Studio生成** ** indentify你的編譯器?通常,手動設置編譯器時,您需要通過[CMAKE_C_COMPILER_ID](https://cmake.org/cmake/help/v3.0/variable/CMAKE_LANG_COMPILER_ID.html)變量設置其標識符。 – Tsyvarev
另外,變量'CMAKE_CROSSCOMPILING'由CMake **自動設置**,不需要手動設置。 – Tsyvarev
您不能只更改Visual Studio的編譯器。它需要安裝一個額外的插件或工具集(這需要CMake意識或需要CMake支持)。剛剛發佈的Visual Studio 2017對Linux系統有一些內置支持,並且已經有[一些查詢](https://cmake.org/pipermail/cmake/2016-October/064369.html)支持這些項目類型通過CMake,但我認爲[還沒有實現](https://github.com/Kitware/CMake/blob/master/Source/cmVisualStudio10TargetGenerator.cxx#L3505)。 – Florian