#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/