-
使用
VERBOSE=1 make
查看链接器输出。搜索
-lhtslib
-
阅读文档了解具体的
Find<LIB>.cmake
。
您的具体问题:
-
“如何找到CMake发现的内容”:使用
cmake-gui
或
ccmake
。它们都显示相同的信息,但一个是GUI,另一个是Curses界面。在高级模式下(“t”打开
Cmake公司
)您将找到搜索包的所有变量。此外,您可以使用
MESSAGE(STATUS "Found htslib at: ${htslib_LIBRARIES}")
。
-
“如何在CMakeLists.txt中明确写入库所在的位置?”请不要那样做!CMake的目的就是将这种信息提取出来。您有两个选项,第一个是好的选项:在命令行(或上面提到的GUI)上配置cmake,以获得
CMAKE_MODULES_PATH
或对库的更具体提示
-D htslib_PATH=/usr/local/.../
(指向目录,其中
libhts.dylib
驻留)。更糟糕的解决方案是向
find_package
。
find_package(htslib REQUIRED PATH /usr/local/lib)
或
find_package(htslib REQUIRED HINT /usr/local/lib /some/second/path/where/it/may/be)
。
解决方案
链接的项目具有自定义
FindHTSlib.cmake
link
.这个使用
pkg_config
配置库。为了复制你的问题,我使用
酿造
要安装
htslib
。可以找到pkg配置文件(对我来说,但是
brew info htslib
告诉你)根据
/usr/local/Cellar/htslib/1.8/lib/htslib.pc
.那么,让我们给CMake一个必要的提示。
我无法测试这个,因为对我来说,它直接找到了htslib包,没有进一步的提示。
git clone https://github.com/D-Lo/bamdb
mkdir -p bamdb/build; cd bamdb/build
brew install ck htslib lmdb
cmake ..
make
我建议在
CMakeLists.txt
CMake的最低要求版本为2.8到
3.10
(或至少3.6)。
这是我得到的错误:
[ 62%] Linking C shared library libbamdb.dylib
/usr/local/Cellar/cmake/3.11.1/bin/cmake -E cmake_link_script CMakeFiles/libbamdb.dir/link.txt --verbose=1
/Library/Developer/CommandLineTools/usr/bin/cc -Wall -g -std=gnu99 -fPIC -dynamiclib -Wl,-headerpad_max_install_names -o libbamdb.dylib -install_name @rpath/libbamdb.dylib CMakeFiles/libbamdb.dir/src/bam_api.c.o CMakeFiles/libbamdb.dir/src/bam_lmdb.c.o CMakeFiles/libbamdb.dir/src/bamdb.c.o
Undefined symbols for architecture x86_64:
"_bam_destroy1", referenced from:
_get_bam_row in bam_api.c.o
_deserialize_func in bam_lmdb.c.o
可以通过在
CMakeLists。txt文件
,在该行之后
add_library(libbamdb ${SOURCES})
:
target_link_libraries(libbamdb ${LIBS})
进一步说明:您现在有了一个具有
main
作用这是因为
${SOURCES}
用于构建可执行文件和库。这可能会产生意想不到的副作用。除非有必要,否则不要这样做。