对于一个特定项目,我正在退出qmake,现在必须使用cmake。
我的路径如下: 资料来源:〜/ Projects / Project
外部静态库(本例中为OSVR)路径:〜/ osvr / lib /,〜/ osvr / include / osvr / osvr / include / jsoncpp
使用qmake,该库的链接部分曾经是:
import csv
with open('log.csv') as csvfile:
readCSV = csv.reader(csvfile, delimiter='\t')
for row in readCSV:
print(row)
现在我需要使用cmake,但该库未链接到:
我的cmake.txt的相关部分:
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/
哪个不起作用......
一点帮助会很可爱,因为我不太确定如何:
确保扫描外部包含文件夹
链接到我的3个库osvrClientKit osvrClient osvrCommon。
事实上,我也对一个很好的解释感兴趣。 提前谢谢。
编辑:感谢ComicSansMs的回复以及后人的工作Cmake语法:
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 )
并沿着赛道走下去:
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})
答案 0 :(得分:0)
您对find_library
的使用看起来不对。
查看manpage for 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})
请注意,这种方法在未来的变化方面非常脆弱,一般应该避免使用导入的目标。
此外,请确保您的查找调用实际上没有找到任何内容,确实有适当的错误处理机制。