Как вы компилируете ImGui в Windows vscode MinGW?

#c #windows #visual-studio-code #mingw

Вопрос:

Правильно, поэтому я уже несколько недель пытаюсь заставить ImGui работать с моим проектом Windows OpenGL. Я перепробовал все. Итак, может кто-нибудь, пожалуйста, показать мне, как скомпилировать ImGui с остальной частью моего проекта. Например, как добавить его в файл задачи vs code или как добавить его в мой файл создания. Также, когда я спрашивал раньше, люди говорили, что используйте CMake. Но я не могу, потому что CMake не работает, поэтому я не могу его использовать, и я не хочу тратить больше времени на то, чтобы попытаться заставить его работать. Так что, пожалуйста, все, кто знает, как помочь, сделайте это.

Вот мой файл создания:

 CXX = g  
Flags = -std=c  17 -Wall -Wformat
Libs = -lGL -lGLEW -lglfw -ldl

OBJDIR = obj
VSXFLAGS = src/vendor/imgui/imgui_impl_glfw.h src/vendor/imgui/imgui_impl_opengl3.h
Filez = src/Rendering/*.cpp src/Rendering/*.h src/Core/*.h src/Core/*.cpp src/vendor/glm/gtc/type_ptr.hpp
Includes = -Isrc/PCH/ -Isrc/ -Iinclude/ -Isrc/Rendering/Buffers/ -Isrc/Core/ -Isrc/Rendering/ -Isrc/vendor/imgui -Isrc/FileManagement/ -Ires/ -Isrc/vendor/glm/ -Isrc/vendor/stb_image -Isrc/vendor/

all: main.cpp
    $(CXX) $(Flags) $(Includes) $(Filez) main.cpp lib/imgui.a lib/Buffers.a -o main $(Libs)

clean:
    rm $(OBJDIR)/*.o *.o
 

Это моя файловая структура:

введите описание изображения здесь[введите описание изображения здесь]введите описание изображения здесь2

Комментарии:

1. Если вы используете Make для сборки, то файл задачи VSCode — это неправильное место для поиска. В вашем файле Makefile вам нужно будет добавить путь к заголовку ImGui в качестве включаемого пути к командам компиляции и добавить imgui.cpp к вашему шагу компиляции (и шагу ссылки, если он у вас есть). Все это зависит от вашего конкретного файла Makefile, если вам нужна более подробная информация, вам необходимо опубликовать ее, а также подробно описать макет вашей папки.

2. Есть еще кое-какая информация. Я добавил несколько фотографий.

Ответ №1:

Поскольку ImGui-это отдельная библиотека, ваш проект должен ссылаться на нее, а не каждый раз компилировать ее с остальной частью вашего проекта.

Вот как я создаю библиотеку (как статическую, так и общую) в оболочке MSYS2:

 # change the next value to where you want to install it
export INSTALLPREFIX=/D/Prog/3rdparty
# fix DLL exports in imgui.h
mv imgui.h imgui.h.bak
cat > imgui.h << EOF
#if !defined(IMGUI_API) amp;amp; defined(_WIN32)
#if defined(BUILD_IMGUI_SHARED)
#define IMGUI_API __declspec(dllexport)
#elif !defined(STATIC) amp;amp; !defined(STATIC_IMGUI)
#define IMGUI_API __declspec(dllimport)
#else
#define IMGUI_API
#endif
#endif
EOF
sed -e "s/static chars*EmptyString/IMGUI_API amp;/" imgui.h.bak >> imgui.h
# don't export inline functions in imgui_internal.h (version >= 1.81)
sed -i.bak -e "s/IMGUI_API (~*ImGuiTable())/1/" imgui_internal.h
~/buildstatus.sh build amp;amp;
 touch SUCCESS amp;amp;
 for F in *.cpp; do
  echo CXX $F amp;amp;
  g   -O3 -I. $F -c -o $F.o -DBUILD_IMGUI_SHARED || rm -f SUCCESS
 done amp;amp;
 ls -1 SUCCESS > /dev/null amp;amp;
 ar cru libimgui.a *.cpp.o amp;amp;
 ( echo EXPORTS; nm -f posix --defined-only -p libimgui.a | sed -n -e "s/^([^ ]*) T .*$/1/p" | sed -e "s/^__*/_/" | grep "Im" ) > imgui.def amp;amp;
 g   -shared -s -mwindows -def imgui.def -o imgui.dll libimgui.a -Wl,--out-implib,libimgui.dll.a -Wl,--as-needed -limm32 amp;amp;
 ~/buildstatus.sh install amp;amp;
 mkdir -p $INSTALLPREFIX/include/imgui $INSTALLPREFIX/lib $INSTALLPREFIX/bin amp;amp;
 cp -f *.cpp *.h $INSTALLPREFIX/include/imgui/ amp;amp;
 cp -f *.a $INSTALLPREFIX/lib/ amp;amp;
 cp -f *.dll $INSTALLPREFIX/bin/ amp;amp;
 echo SUCCESS
 

Убедитесь, что ваша среда MSYS2 указывает на тот же компилятор, что и VSCode, в случае, если он отличается (добавить в PATH ).

Моя сборка была выполнена с помощью недавнего автономного GCC/MinGW-w64 от https://winlibs.com/