Сборка CMake с gcc / g ++ не работает в Windows - PullRequest
0 голосов
/ 30 мая 2019

Я установил CMake 3.14.4 (из cmake-3.14.4-win64-x64.msi) и GCC 5.1.0 (из tdm64-gcc-5.1.0-2.exe) в Windows 7 Enterprise и 10Домашняя страница (64-разрядная версия).

Я пытаюсь собрать .LIL из исходных файлов cpp / hpp github sources. CMakeLists.txt ссылается на каталог include из установки COTS,Заголовочный файл в каталоге include имеет это if-else, и сборка CMake всегда выдает ошибку, выпадая в последнем блоке else ниже:

# if defined(_M_AMD64)
#  include <wchar.h>
#  if BIP_CXX11_SUPPORT
typedef char16_t CciChar;
#  else
typedef wchar_t CciChar;
#  endif
typedef __int64 CciInt;
typedef unsigned __int64 CciCount;
#  define __CCI_WINDOWS__
# else
#  error The C plugin interface for IBM Integration Bus is only available 
for 64-bit Windows x86-64 systems
#endif

Шаги:

1. c:\iib-swm\build>cmake -DIIB_INSTALL_DIR=C:\Progra~1\IBM\IIB\10.0.0.12 
-G "MinGW Makefiles" ../source
-- The CXX compiler identification is GNU 5.1.0
-- Check for working CXX compiler: C:/software/C++Tools/tdm- 
gcc/bin/g++.exe
-- Check for working CXX compiler: C:/software/C++Tools/tdm- 
gcc/bin/g++.exe -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Configuring done
-- Generating done
-- Build files have been written to: C:/iib-swm/build

Этосодержимое CMakeSystem.cmake после этого шага:

set(CMAKE_HOST_SYSTEM "Windows-6.1.7601")
set(CMAKE_HOST_SYSTEM_NAME "Windows")
set(CMAKE_HOST_SYSTEM_VERSION "6.1.7601")
set(CMAKE_HOST_SYSTEM_PROCESSOR "AMD64")



set(CMAKE_SYSTEM "Windows-6.1.7601")
set(CMAKE_SYSTEM_NAME "Windows")
set(CMAKE_SYSTEM_VERSION "6.1.7601")
set(CMAKE_SYSTEM_PROCESSOR "AMD64")

set(CMAKE_CROSSCOMPILING "FALSE")

set(CMAKE_SYSTEM_LOADED 1)

2. c:\iib-swm\build>cmake --build .

   -- Configuring done
   -- Generating done
   -- Build files have been written to: C:/iib-swm/build
   [ 33%] Building CXX object 
   CMakeFiles/statsdsw.dir/StatsdStatsWriter.cpp.obj
   In file included from 
   C:/Progra~1/IBM/IIB/10.0.0.12/server/include/plugin/BipCci.h:14:0,
             from 
   C:/Progra~1/IBM/IIB/10.0.0.12/server/include/plugin/BipCsi.h:14,
             from C:\iib-swm\source\StatsdStatsWriter.hpp:13,
             from C:\iib-swm\source\StatsdStatsWriter.cpp:10:
   C:/Progra~1/IBM/IIB/10.0.0.12/server/include/plugin/BipCos.h:170:4: 
   error: #error The C plugin inter
   face for IBM Integration Bus is only available for 64-bit Windows x86- 
   64 systems
   #  error The C plugin interface for IBM Integration Bus is only 
   available for 64-bit Windows x86-64
   systems
      ^
   CMakeFiles\statsdsw.dir\build.make:62: recipe for target 
   'CMakeFiles/statsdsw.dir/StatsdStatsWriter.
   cpp.obj' failed
   mingw32-make.exe[2]: *** 
   [CMakeFiles/statsdsw.dir/StatsdStatsWriter.cpp.obj] Error 3
   CMakeFiles\Makefile2:71: recipe for target 
   'CMakeFiles/statsdsw.dir/all' failed
   mingw32-make.exe[1]: *** [CMakeFiles/statsdsw.dir/all] Error 130
   Makefile:82: recipe for target 'all' failed
   mingw32-make.exe: *** [all] Error 130

Я просто не могу понять, что даже когда CMake распознает системный процессор как AMD64, он не преобразуется в _M_AMD64 во включаемых файлах .hфайл?Я траул CMake и связанные ресурсы в сети.Попытка запустить CMake от имени администратора, сократила путь, по которому проект git был клонирован без удачи.

PS: Моя единственная кисть с cpp была в Uni 15 лет назад, поэтому, пожалуйста, помилуйте мои лорды (и дамы), еслиЯ упустил C очевидное.

1 Ответ

0 голосов
/ 30 мая 2019

_M_AMD64 представляется специфичным для компиляторов Visual Studio. Этот вопрос сбивает с толку, поскольку предполагает, что CMake выполняет предварительную обработку. Это не так. Вы используете gcc. gcc, по-видимому, не реализует специфичные для Visual Studio макросы препроцессора.

Вам придется либо изменить код для работы с gcc, либо определить недостающие макросы самостоятельно, используя команду CMake, например target_compile_definitions.

Имейте в виду, что файл README говорит об использовании Visual Studio 2015 для сборки в Windows.

...