cmake:更改链接器命令

发布于 2024-10-02 10:50:43 字数 1130 浏览 2 评论 0原文

当你知道如何做时,这可能很容易,但我不知道:)

我正在尝试构建一些使用 opengl/glut 的代码。我正在使用 cmake opengl 等的 cygwin 版本。我看到的 opengl/gult 的唯一参考是在 CMakeLists.txt 中:

find_package(OpenGL REQUIRED)
find_package(GLU REQUIRED)
find_package(GLUT REQUIRED)

一切正常,直到链接阶段结束:

CMakeFiles/glview.dir/glview.c.o: In function `DrawGLScene': /cygdrive/C/code/libfreenect/examples/glview.c:88: undefined reference to `__imp__glutSwapBuffers@0'
CMakeFiles/glview.dir/glview.c.o: In function `keyPressed': /cygdrive/C/code/libfreenect/examples/glview.c:96: undefined reference to `__imp
etc.

经过 git 谷歌搜索后,我发现了这一点因为 cmake 正在为链接器提供一个 -lglut 标志,而它应该为它提供一个 -lgut32 标志。通过手动执行链接命令,我可以构建程序:

/usr/bin/gcc.exe  -Wall -O3 -g  -Wl,--enable-auto-import CMakeFiles/glview.dir/glview.c.o  -o glview.exe -Wl,--out-implib,libglview.dll.a -Wl,--major-image-version,0,--minor-image-version,0  -L/cygdrive/C/code/libfreenect/lib ../lib/libfreenect.a -lGL -lGLU -lglut32 -lm -lpthread -lusb-1.0

但我不知道如何让 cmake 为我生成此命令,因此不需要手动步骤。有什么想法我应该做什么吗?

干杯,

罗布

This probably very easy when you know how, but I don't :)

I'm trying to build some code that takes uses opengl/glut. I'm using the cygwin version of cmake opengl etc. The only reference I see to opengl/gult is in the CMakeLists.txt:

find_package(OpenGL REQUIRED)
find_package(GLU REQUIRED)
find_package(GLUT REQUIRED)

Everything works fine up till the linking stage, which ends with:

CMakeFiles/glview.dir/glview.c.o: In function `DrawGLScene': /cygdrive/C/code/libfreenect/examples/glview.c:88: undefined reference to `__imp__glutSwapBuffers@0'
CMakeFiles/glview.dir/glview.c.o: In function `keyPressed': /cygdrive/C/code/libfreenect/examples/glview.c:96: undefined reference to `__imp
etc.

After a git of googling I figured out this because cmake is feading the linker a -lglut flag, when it should be feading it a -lgut32 flag. By manually executing the linking command, I can get the program to build:

/usr/bin/gcc.exe  -Wall -O3 -g  -Wl,--enable-auto-import CMakeFiles/glview.dir/glview.c.o  -o glview.exe -Wl,--out-implib,libglview.dll.a -Wl,--major-image-version,0,--minor-image-version,0  -L/cygdrive/C/code/libfreenect/lib ../lib/libfreenect.a -lGL -lGLU -lglut32 -lm -lpthread -lusb-1.0

But I can't figure out how to get cmake to generate this command for me so no manual steps are needed. Any ideas what I should be doing?

Cheers,

Rob

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

爱的十字路口 2024-10-09 10:50:43

这是添加要链接的库的方法:

target_link_libraries( ${TargetName} gut32 )

find_package 仅确保找到该包,仅此而已。

this is how to add libraries to link to:

target_link_libraries( ${TargetName} gut32 )

find_package only assures the package is found, no more.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文