2017-08-29 87 views
0

我在Cygwin上,我想调用安装在Windows上的编译器。我遇到了路径格式问题。如何告诉CMake使用Windows路径,而不是Cygwin的?

有了这个非常简单的CMakeLists.txt

cmake_minimum_required(VERSION 3.6) 

set(CMAKE_SYSTEM_NAME Generic) 
set(CMAKE_SYSTEM_PROCESSOR Cortex-M4) 

set(CMAKE_C_COMPILER iccarm.exe) 
set(CMAKE_CXX_COMPILER iccarm.exe) 
set(CMAKE_ASM_COMPILER iasmarm.exe) 

project("test" C) 

set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) 
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) 
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) 
set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY) 

if(NOT EXISTS main.c) 
    file(WRITE main.c "int main(void){return 0;}\n") 
endif() 

add_executable(
    test 
    main.c 
) 

,我碰到一个问题,当CMake的检查编译:

-- The C compiler identification is IAR 
-- Check for working C compiler: /cygdrive/c/Program Files (x86)/IAR Systems/Embedded Workbench 8.0/arm/bin/iccarm.exe 
-- Check for working C compiler: /cygdrive/c/Program Files (x86)/IAR Systems/Embedded Workbench 8.0/arm/bin/iccarm.exe -- broken 
CMake Error at /usr/share/cmake-3.6.2/Modules/CMakeTestCCompiler.cmake:61 (message): 
    The C compiler "/cygdrive/c/Program Files (x86)/IAR Systems/Embedded 
    Workbench 8.0/arm/bin/iccarm.exe" is not able to compile a simple test 
    program. 

    It fails with the following output: 

    Change Dir: /cygdrive/c/Users/nobody/home/sandbox/cmakeiar/CMakeFiles/CMakeTmp 

那是因为CMake的不知道,或者应该知道, iccarm.exe是一个期望Windows路径的Windows程序。

有没有给CMake这个信息的解决方案?

我成像是这样的:

if(PLATFORM_IS_CYGWIN) 
    set(CMAKE_IS_WINDOWS_EXECUTABLE iccarm.exe) 
endif() 
+0

您使用哪个版本的CMake? Cygwin的CMake包或Windows安装CMake?第一个会给前缀,第二个不会。 – Florian

+0

我使用Cygwin的版本,我试过 – nowox

+0

奇怪的是,我再次检查了代码:我在平台检查中看到的唯一情况是,是否存在__CYGWIN__定义。你可以运行'cmake.exe --system-information'并添加所有名称或值为'CYGWIN'的变量条目吗?像'_PLATFORM_DEFINES'这样的东西会特别引起人们的兴趣。您也可以尝试在Windows格式中给出编译器的完整路径。 – Florian

回答

1

谈到我的意见为答案

请注意,Cygwin的CMake的会给/cygdrive前缀,但安装的Windows版本的CMake不会。

我已经在我的PATH环境中运行一个测试你的CMakeLists.txt,IAR的ARM编译器,可以从Cygwin的bash shell中运行成功:

$ /cygdrive/c/Program\ Files/CMake/bin/cmake -G "Unix Makefiles" .. 
-- The C compiler identification is IAR 
-- Check for working C compiler: C:/Program Files (x86)/IAR Systems/Embedded Workbench 8.0/arm/bin/iccarm.exe 
-- Check for working C compiler: C:/Program Files (x86)/IAR Systems/Embedded Workbench 8.0/arm/bin/iccarm.exe -- works 
-- Detecting C compiler ABI info 
-- Detecting C compiler ABI info - done 
-- Configuring done 
-- Generating done 
-- Build files have been written to: ... 

如果我只是叫cmake ..(Cygwin的版本)我得到了你得到的同样的错误。

相关问题