对于一个特定的项目,我将离开qmake,现在必须使用cmake。
我的路径如下:源:~/Projects/Project
外部静态库(本例中为osvr)路径:~/osvr/lib/,~/osvr/include /osvr /include/jsoncpp
使用qmake,与该库的链接部分过去是:
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的相关部分:
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 )这不管用..。
帮个小忙会很好,因为我不太确定怎么做:
事实上,我也对一个很好的解释感兴趣。提前谢谢。
编辑:感谢ComicSansMs和后代的回复,工作的Cmake语法:
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})在赛道上:
target_link_libraries(myExec ${QT_LIBRARIES} ${OSVR_LIBRARIES} )
target_include_directories(myExec PUBLIC include ${OSVR_INCLUDE_DIR} )发布于 2018-01-16 09:50:36
您对find_library的使用看起来是错误的。
看看find_library。你必须给出你想要找到的库的名称作为一个论据。您还可以选择提供其他提示,以便在哪里找到该库:
find_library(OSVR_COMMON_LIBRARY osvrCommon
HINTS ${OSVR_DIR}/lib)注意,每个库都需要一个单独的find_library调用!由于您的库似乎具有相互依赖关系,所以在CMake中建模它们的正确方法是在每个库中添加一个导入的目标,然后添加一个model the interdependencies on those targets correctly。
如果您还不习惯这样做,还可以按照正确的顺序将所有的查找库添加到单个OSVR_LIBRARIES变量中,然后依赖于这一点:
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调用实际上找不到任何东西的情况下。
https://stackoverflow.com/questions/48273378
复制相似问题