你如何在 Windows vscode MinGW 上编译 ImGui?
How do you compile ImGui on Windows vscode MinGW?
是的,所以我已经尝试了数周,让 ImGui 与我的 windows OpenGL 项目一起工作。我已经尝试了一切。那么,有人可以告诉我如何用我的项目的其余部分编译 ImGui 吗?就像如何将它添加到 vs 代码任务文件或如何将它添加到我的 makefile 中。另外,当我问过之前人们说使用 CMake 时。但我不能,因为 CMake 不工作,所以我不能使用它,我不想浪费更多时间来尝试让它工作。所以,请知道如何提供帮助的人。
这是我的 makefile:
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
由于 ImGui 是一个单独的库,因此您的项目应该 link 反对它,而不是每次都将其与项目的其余部分一起编译。
以下是我在 MSYS2 中构建库(静态库和共享库)的方法 shell:
# 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) && defined(_WIN32)
#if defined(BUILD_IMGUI_SHARED)
#define IMGUI_API __declspec(dllexport)
#elif !defined(STATIC) && !defined(STATIC_IMGUI)
#define IMGUI_API __declspec(dllimport)
#else
#define IMGUI_API
#endif
#endif
EOF
sed -e "s/static char\s*EmptyString/IMGUI_API &/" 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()\)//" imgui_internal.h
~/buildstatus.sh build &&
touch SUCCESS &&
for F in *.cpp; do
echo CXX $F &&
g++ -O3 -I. $F -c -o $F.o -DBUILD_IMGUI_SHARED || rm -f SUCCESS
done &&
ls -1 SUCCESS > /dev/null &&
ar cru libimgui.a *.cpp.o &&
( echo EXPORTS; nm -f posix --defined-only -p libimgui.a | sed -n -e "s/^\([^ ]*\) T .*$//p" | sed -e "s/^__*/_/" | grep "Im" ) > imgui.def &&
g++ -shared -s -mwindows -def imgui.def -o imgui.dll libimgui.a -Wl,--out-implib,libimgui.dll.a -Wl,--as-needed -limm32 &&
~/buildstatus.sh install &&
mkdir -p $INSTALLPREFIX/include/imgui $INSTALLPREFIX/lib $INSTALLPREFIX/bin &&
cp -f *.cpp *.h $INSTALLPREFIX/include/imgui/ &&
cp -f *.a $INSTALLPREFIX/lib/ &&
cp -f *.dll $INSTALLPREFIX/bin/ &&
echo SUCCESS
确保您的 MSYS2 环境指向与 VSCode 相同的编译器,以防其不同(添加到 PATH
)。
我的构建是使用来自 https://winlibs.com/
的最新独立 GCC/MinGW-w64 完成的
是的,所以我已经尝试了数周,让 ImGui 与我的 windows OpenGL 项目一起工作。我已经尝试了一切。那么,有人可以告诉我如何用我的项目的其余部分编译 ImGui 吗?就像如何将它添加到 vs 代码任务文件或如何将它添加到我的 makefile 中。另外,当我问过之前人们说使用 CMake 时。但我不能,因为 CMake 不工作,所以我不能使用它,我不想浪费更多时间来尝试让它工作。所以,请知道如何提供帮助的人。
这是我的 makefile:
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
这是我的文件结构:
由于 ImGui 是一个单独的库,因此您的项目应该 link 反对它,而不是每次都将其与项目的其余部分一起编译。
以下是我在 MSYS2 中构建库(静态库和共享库)的方法 shell:
# 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) && defined(_WIN32)
#if defined(BUILD_IMGUI_SHARED)
#define IMGUI_API __declspec(dllexport)
#elif !defined(STATIC) && !defined(STATIC_IMGUI)
#define IMGUI_API __declspec(dllimport)
#else
#define IMGUI_API
#endif
#endif
EOF
sed -e "s/static char\s*EmptyString/IMGUI_API &/" 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()\)//" imgui_internal.h
~/buildstatus.sh build &&
touch SUCCESS &&
for F in *.cpp; do
echo CXX $F &&
g++ -O3 -I. $F -c -o $F.o -DBUILD_IMGUI_SHARED || rm -f SUCCESS
done &&
ls -1 SUCCESS > /dev/null &&
ar cru libimgui.a *.cpp.o &&
( echo EXPORTS; nm -f posix --defined-only -p libimgui.a | sed -n -e "s/^\([^ ]*\) T .*$//p" | sed -e "s/^__*/_/" | grep "Im" ) > imgui.def &&
g++ -shared -s -mwindows -def imgui.def -o imgui.dll libimgui.a -Wl,--out-implib,libimgui.dll.a -Wl,--as-needed -limm32 &&
~/buildstatus.sh install &&
mkdir -p $INSTALLPREFIX/include/imgui $INSTALLPREFIX/lib $INSTALLPREFIX/bin &&
cp -f *.cpp *.h $INSTALLPREFIX/include/imgui/ &&
cp -f *.a $INSTALLPREFIX/lib/ &&
cp -f *.dll $INSTALLPREFIX/bin/ &&
echo SUCCESS
确保您的 MSYS2 环境指向与 VSCode 相同的编译器,以防其不同(添加到 PATH
)。
我的构建是使用来自 https://winlibs.com/
的最新独立 GCC/MinGW-w64 完成的