Cmake не генерирует решения assimp должным образом [Windows 10]

Cmake 3.15 32-разрядная версия

Ассимп 4.1.0

Привет, у меня возникли некоторые трудности с cmake и assimp. В течение последних нескольких дней я пытался создать рабочее пространство assimp для CodeBlocks через cmake.

Я попытался создать решение с подходом CMD и CmakeGUI, но без удовлетворительных результатов.

В графическом интерфейсе стандартная процедура создания проектов сопровождалась определением правильных исходных и целевых путей и выбором соответствующих генераторов (CodeBlocks MinGW Makefiles).

Код, используемый в cmd для создания проекта assimp:

cmake -G "CodeBlocks - MinGW Makefiles" MakeLists.txt -S "source path" -B "build path"

Информационный журнал, который я получаю после создания файлов:

-- The C compiler identification is GNU 8.2.0
-- The CXX compiler identification is GNU 8.2.0
-- Check for working C compiler: C:/MinGW/bin/gcc.exe
-- Check for working C compiler: C:/MinGW/bin/gcc.exe -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Detecting C compile features
-- Detecting C compile features - done
-- Check for working CXX compiler: C:/MinGW/bin/g++.exe
-- Check for working CXX compiler: C:/MinGW/bin/g++.exe -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Shared libraries enabled
-- Looking for DirectX...
-- DirectX_PREFIX_PATH changed.
-- Found DirectX: C:/MinGW/lib/libd3d9.a
-- DX lib dir: C:/MinGW/lib
-- Looking for ZLIB...
-- Could NOT find PkgConfig (missing: PKG_CONFIG_EXECUTABLE)
-- Could not locate ZLIB
-- compiling zlib from souces
CMake Deprecation Warning at contrib/zlib/CMakeLists.txt:8 (cmake_policy):
  The OLD behavior for policy CMP0048 will be removed from a future version
  of CMake.

  The cmake-policies(7) manual explains that the OLD behaviors of all
  policies are deprecated and that a policy should be set to OLD only under
  specific short-term circumstances.  Projects should be ported to the NEW
  behavior and not rely on setting a policy to OLD.


-- Looking for sys/types.h
-- Looking for sys/types.h - found
-- Looking for stdint.h
-- Looking for stdint.h - found
-- Looking for stddef.h
-- Looking for stddef.h - found
-- Check size of off64_t
-- Check size of off64_t - done
-- Looking for fseeko
-- Looking for fseeko - not found
-- Looking for unistd.h
-- Looking for unistd.h - found
-- Could NOT find PkgConfig (missing: PKG_CONFIG_EXECUTABLE)
-- Could NOT find rt (missing: RT_LIBRARY)
INFO RT-extension not found. glTF import/export will be built without Open3DGC-compression.
-- Enabled formats: AMF 3DS AC ASE ASSBIN ASSXML B3D BVH COLLADA DXF CSM HMP IRRMESH IRR LWO LWS MD2 MD3 MD5 MDC MDL NFF NDO OFF OBJ OGRE OPENGEX PLY MS3D COB BLEND IFC XGL FBX Q3D Q3BSP RAW SIB SMD STL TERRAGEN 3D X X3D GLTF 3MF MMD
-- Disabled formats:
-- Could NOT find IL (missing: IL_LIBRARIES IL_INCLUDE_DIR)
CMake Warning at CMakeLists.txt:439 (MESSAGE):
  Build of assimp_qt_viewer is disabled.  Unsatisfied dendencies: Qt5 DevIL

-- Configuring done
-- Generating done
-- Build files have been written to: E:/Assimp

К сожалению, проект не может построить CodeBlocks со следующим журналом сборки:

Checking if target is up-to-date: mingw32-make.exe -q -f Makefile all
Running command: C:/TDM-GCC-64/bin/mingw32-make.exe -f "E:/Assimp/Makefile"  VERBOSE=1 all
"C:\Program Files\CMake\bin\cmake.exe" -SC:\Users\ognje\Downloads\assimp-4.1.0 -B"E:\Assimp" --check-build-system CMakeFiles\Makefile.cmake 0
"C:\Program Files\CMake\bin\cmake.exe" -E cmake_progress_start "E:\Assimp\CMakeFiles" "E:\Assimp\CMakeFiles\progress.marks"
C:/TDM-GCC-64/bin/mingw32-make.exe -f CMakeFiles\Makefile2 all
mingw32-make.exe[1]: Entering directory 'E:/Assimp'
C:/TDM-GCC-64/bin/mingw32-make.exe -f contrib\zlib\CMakeFiles\zlib.dir\build.make contrib/zlib/CMakeFiles/zlib.dir/depend
mingw32-make.exe[2]: Entering directory 'E:/Assimp'
[  1%] Generating zlib1rc.obj
cd /d E:\PROGRA~3\PROGRA~1\Assimp\contrib\zlib && C:\MinGW\bin\windres.exe -D GCC_WINDRES -I C:/Users/ognje/Downloads/assimp-4.1.0/contrib/zlib -I "E:/Assimp/contrib/zlib" -o "E:/Assimp/contrib/zlib/zlib1rc.obj" -i C:/Users/ognje/Downloads/assimp-4.1.0/contrib/zlib/win32/zlib1.rc
gcc: error: i\: No such file or directory
gcc: error: Assimp/contrib/zlib: No such file or directory
C:\MinGW\bin\windres.exe: preprocessing failed.
mingw32-make.exe[2]: *** [contrib/zlib/zlib1rc.obj] Error 1
mingw32-make.exe[1]: *** [contrib/zlib/CMakeFiles/zlib.dir/all] Error 2
mingw32-make.exe: *** [all] Error 2
contrib\zlib\CMakeFiles\zlib.dir\build.make:60: recipe for target 'contrib/zlib/zlib1rc.obj' failed
mingw32-make.exe[2]: Leaving directory 'E:/Assimp'
CMakeFiles\Makefile2:134: recipe for target 'contrib/zlib/CMakeFiles/zlib.dir/all' failed
mingw32-make.exe[1]: Leaving directory 'E:/Assimp'
E:/Assimp/Makefile:128: recipe for target 'all' failed
Process terminated with status 2 (0 minute(s), 0 second(s))
6 error(s), 0 warning(s) (0 minute(s), 0 second(s))

Отказ от ответственности:

Естественно, я уже погуглил и попробовал все уже существующие решения в Интернете [1]. для этой конкретной проблемы и, к сожалению, ни один из них не работает. Честно говоря, я мало разбираюсь в компиляции и библиотеках, но, по моему мнению, при чтении журналов ошибок я бы сказал, что проблема связана с файлами zlib, верно? Может ли кто-нибудь помочь мне с этой проблемой? Заранее спасибо.


person SteyrMozzy    schedule 18.07.2019    source источник
comment
Существует ли E:/Assimp/contrib/zlib? Сгенерированные команды сборки, кажется, полагаются на него. Если это сработает, подумайте о том, чтобы поднять проблему на их странице проекта, поскольку сборки вне дерева (то, что вы пытаетесь сделать) кажутся сломанными.   -  person Botje    schedule 18.07.2019
comment
Да, на самом деле E:/Assimp/contrib/zlib действительно существует.   -  person SteyrMozzy    schedule 18.07.2019


Ответы (1)


Проблема вызвана неправильной обнаруженной средой. Zlib-скрипт пытается использовать следующую опцию для windows-resource-build:

C:\MinGW\bin\windres.exe -D GCC_WINDRES -I C:/Users/ognje/Downloads/assimp-4.1.0/contrib/zlib -I "E:/Assimp/contrib/zlib" -o "E:/Assimp/contrib/zlib/zlib1rc.obj" -i C:/Users/ognje/Downloads/assimp-4.1.0/contrib/zlib/win32/zlib1.rc

Опция -i будет идентифицирована как файл-токен:

gcc: error: i\: No such file or directory

Итак, сборка для zlib завершается неудачно, потому что параметр, который использовался в качестве аргумента, сбивает с толку gcc-анализ следующего материала, в данном случае целевого zlib:

gcc: error: Assimp/contrib/zlib: No such file or directory

Я предполагаю, что это вызвано отсутствием идентификации кода, который должен быть создан при использовании вашей специальной версии mingw. Не могли бы вы открыть отчет о проблеме, указав, что вы можете сделать версию assimp, которую вы используете, и какая версия gcc используется в вашей сборке. Вы можете сделать это здесь: система отслеживания ошибок проекта Asset-Importer-Lib

person KimKulling    schedule 09.08.2019
comment
Извините, моя ошибка, эта проблема была исправлена ​​​​через день после публикации. Могу поклясться, что я уже ответил в этой теме, утверждая, что я это исправил. Итак, во-первых, я должен кое-что признать, прежде чем создавать эту тему, я намеренно сократил и перевел исходное местоположение Assimp E:\Programiranje i Matematika\Programiranje\Grapicko\OpenGL\Assimp на E:\Assimp, думая, что было бы проще читатель. - person SteyrMozzy; 09.08.2019
comment
Кажется, что Cmake терпит неудачу с путями, имеющими пробелы в своей иерархической организации. Поэтому я просто изменил целевую сборку с вышеупомянутой на E:\Assimp в Cmake, и теперь, когда я пытаюсь собрать библиотеку из решения, я получаю следующую ошибку после 60% завершения: ..\mingw\lib\libmingwex.a(vsnprintf.o)|| multiple definition of 'vsnprintf'; CMakeFiles\assimp.dir/objects.a(AssxmlExporter.cpp.obj):AssxmlExporter.cpp:(.text$vsnprintf[_vsnprintf]+0x0): first defined here| - person SteyrMozzy; 09.08.2019