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使用Windows路径,而不是Cygwin路径?_Cmake_Cygwin - Fatal编程技术网

如何告诉CMake使用Windows路径,而不是Cygwin路径?

如何告诉CMake使用Windows路径,而不是Cygwin路径?,cmake,cygwin,Cmake,Cygwin,我在Cygwin上,我想调用安装在Windows上的编译器。我对路径格式有问题 使用这个非常简单的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_

我在Cygwin上,我想调用安装在Windows上的编译器。我对路径格式有问题

使用这个非常简单的
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()
把我的评论变成答案

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

我已经用您的
CMakeLists.txt
运行了一个测试,它是我的
PATH
环境中的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版本),我会收到与您相同的错误。

将我的评论转化为答案

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

我已经用您的
CMakeLists.txt
运行了一个测试,它是我的
PATH
环境中的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版本),我会得到与您相同的错误。

您使用哪个版本的cmake?Cygwin的CMake软件包还是Windows安装的CMake?第一个会给出前缀,第二个不会。我使用Cygwin版本,并且我尝试了两种方法,我再次检查了代码:我在平台检查中看到的唯一一件事是,是否存在
\uuuuucygwin\uuu
定义。请运行
cmake.exe--system information
并添加名称或值中包含
CYGWIN
的所有变量条目,好吗?像
\u PLATFORM\u DEFINES
这样的东西尤其令人感兴趣。您也可以尝试以Windows格式为编译器提供完整路径。问题不在于编译器的完整路径,而在于作为编译器参数提供的路径。由于CMake对编译器进行内部检查,我无法访问它生成的临时路径和文件。当然,如果CMake尝试执行
iccarm-c/cygdrive/c/…
它将无法工作。CMake必须提供Windows路径,例如
iccarm-c:\…
@Florian我运行了
CMake--系统信息,并在那里获得了大量CYGWIN。您需要什么信息?您使用哪一版本的CMake?Cygwin的CMake软件包还是Windows安装的CMake?第一个会给出前缀,第二个不会。我使用Cygwin版本,并且我尝试了两种方法,我再次检查了代码:我在平台检查中看到的唯一一件事是,是否存在
\uuuuucygwin\uuu
定义。请运行
cmake.exe--system information
并添加名称或值中包含
CYGWIN
的所有变量条目,好吗?像
\u PLATFORM\u DEFINES
这样的东西尤其令人感兴趣。您也可以尝试以Windows格式为编译器提供完整路径。问题不在于编译器的完整路径,而在于作为编译器参数提供的路径。由于CMake对编译器进行内部检查,我无法访问它生成的临时路径和文件。当然,如果CMake尝试执行
iccarm-c/cygdrive/c/…
它将无法工作。CMake必须提供Windows路径,例如
iccarm-c:\…
@Florian我运行了
CMake--系统信息,并在那里获得了大量CYGWIN。你在寻找什么信息?