【问题标题】:cmake: altering the linker commandcmake:更改链接器命令
【发布时间】:2010-11-13 16:03:12
【问题描述】:

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

我正在尝试构建一些使用 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.

在谷歌搜索之后我发现了这一点,因为 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 为我生成此命令,因此不需要手动步骤。有什么想法我应该做什么?

干杯,

罗伯

【问题讨论】:

    标签: linker cygwin cmake


    【解决方案1】:

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

    target_link_libraries( ${TargetName} gut32 )
    

    find_package 只保证找到包,没有更多。

    【讨论】:

    • 我认为应该是 target_link_libraries(${TargetName} ${GLUT_LIBRARIES} ${GLU_LIBRARIES} ${OpenGL_LIBRARIES})
    • 这当然是可能的;我猜 find_package 会创建这些变量吗?
    • find_package 创建那些,是的,如果找到合适的库,它会将这些变量设置为每个组件所需库的实际列表。
    猜你喜欢
    • 2011-03-23
    • 2018-05-14
    • 2018-01-08
    • 2014-07-21
    • 2014-02-24
    • 1970-01-01
    • 2015-09-29
    • 1970-01-01
    • 2012-09-21
    相关资源
    最近更新 更多