首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >qmake到Cmake转换:外部librairies的语法

qmake到Cmake转换:外部librairies的语法
EN

Stack Overflow用户
提问于 2018-01-16 02:45:48
回答 1查看 151关注 0票数 1

对于一个特定的项目,我将离开qmake,现在必须使用cmake。

我的路径如下:源:~/Projects/Project

外部静态库(本例中为osvr)路径:~/osvr/lib/,~/osvr/include /osvr /include/jsoncpp

使用qmake,与该库的链接部分过去是:

代码语言:javascript
复制
INCLUDEPATH += /usr/include

LIBS += -L$$PWD/../../osvr/lib/ -losvrClientKit -losvrClient -losvrCommon    -losvrUtil -ljsoncpp

INCLUDEPATH += $$PWD/../../osvr/include/
INCLUDEPATH += $$PWD/../../jsoncpp/include/
DEPENDPATH += $$PWD/../../osvr/lib/

现在我需要使用cmake,但是库没有链接到:

我的cmake.txt的相关部分:

代码语言:javascript
复制
set(OSVR_DIR /home/pilou/osvr)
set(OSVR_INCLUDE_DIR /home/pilou/osvr/include/osvr/ClientKit)
find_library(OSVR_LIBRARIES ${OSVR_DIR}/lib)

[...]

target_link_libraries(myexec ${QT_LIBRARIES} ${OSVR_LIBRARIES} )
target_include_directories(myexec PUBLIC include ${OSVR_DIR}/include )

这不管用..。

帮个小忙会很好,因为我不太确定怎么做:

  • 以确保扫描外部包含文件夹
  • 链接到我的3个库osvrClientKit osvrClient osvrCommon。

事实上,我也对一个很好的解释感兴趣。提前谢谢。

编辑:感谢ComicSansMs和后代的回复,工作的Cmake语法:

代码语言:javascript
复制
set(OSVR_DIR /home/pilou/osvr)
set(OSVR_INCLUDE_DIR /home/pilou/osvr/include)
find_library(OSVR_CLIENT_KIT_LIBRARY osvrClientKit HINTS ${OSVR_DIR}/lib)
find_library(OSVR_CLIENT_LIBRARY osvrClient HINTS ${OSVR_DIR}/lib)
find_library(OSVR_COMMON_LIBRARY osvrCommon HINTS ${OSVR_DIR}/lib)
find_library(OSVR_UTIL_LIBRARY osvrUtil HINTS ${OSVR_DIR}/lib)
find_library(JSONCPP_LIBRARY jsoncpp HINTS ${OSVR_DIR}/lib/x86_64-linux-gnu)
set(OSVR_LIBRARIES ${OSVR_CLIENT_KIT_LIBRARY} ${OSVR_CLIENT_LIBRARY} ${OSVR_COMMON_LIBRARY} ${OSVR_UTIL_LIBRARY} ${JSONCPP_LIBRARY})

在赛道上:

代码语言:javascript
复制
target_link_libraries(myExec ${QT_LIBRARIES} ${OSVR_LIBRARIES} )
target_include_directories(myExec PUBLIC include ${OSVR_INCLUDE_DIR} )
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-01-16 09:50:36

您对find_library的使用看起来是错误的。

看看find_library。你必须给出你想要找到的库的名称作为一个论据。您还可以选择提供其他提示,以便在哪里找到该库:

代码语言:javascript
复制
find_library(OSVR_COMMON_LIBRARY osvrCommon
             HINTS ${OSVR_DIR}/lib)

注意,每个库都需要一个单独的find_library调用!由于您的库似乎具有相互依赖关系,所以在CMake中建模它们的正确方法是在每个库中添加一个导入的目标,然后添加一个model the interdependencies on those targets correctly

如果您还不习惯这样做,还可以按照正确的顺序将所有的查找库添加到单个OSVR_LIBRARIES变量中,然后依赖于这一点:

代码语言:javascript
复制
find_package(OSVR_COMMON_LIBRARY ...)
find_package(OSVR_CLIENT_LIBRARY ...)
find_package(OSVR_CLIENTKIT_LIBRARY ...)
 ...

set(OSVR_LIBRARIES ${OSVR_CLIENTKIT_LIBRARY} ${OSVR_CLIENT_LIBRARY} ${OSVR_COMMON_LIBRARY} ...)
target_link_libraries(myexec ${QT_LIBRARIES} ${OSVR_LIBRARIES})

不过,请注意,对于未来的更改,这种方法是非常脆弱的,一般应该避免使用导入的目标。

此外,要确保您确实有适当的错误处理机制,以便在您的find调用实际上找不到任何东西的情况下。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48273378

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档