【发布时间】:2020-01-07 22:49:02
【问题描述】:
我正在尝试将预构建的静态库 leveldb 链接到一个小型 c++ 脚本,但是在尝试从 lib 中包含 .h 文件时出现文件未找到错误。我不太了解 CMake,因此不胜感激。
//script.cc
#include <iostream>
#include "leveldb/db.h" // <<<<<<<< " fatal error: leveldb/db.h: No such file or directory"
int main(int argc, char** argv){
std::cout << "hello \n";
return 0;
}
根据其他堆栈溢出帖子,静态链接是使用 target_link_libraries() 完成的。
这是我当前的 cmake 文件
CMakeLists.txt
cmake_minimum_required(VERSION 3.13.4)
project(my_project)
link_directories(${CMAKE_SOURCE_DIR}/third_party/)
add_executable(runscript script.cc)
target_link_libraries(runscript ${CMAKE_SOURCE_DIR}/third_party/libleveldb.a)
这基本上就是我的项目目录的样子
.
├── CMakeLists.txt
├── script.cc
└── third_party
└── libleveldb.a
【问题讨论】:
-
那么
db.h文件在哪里? -
它应该是静态库的一部分吧?,看看github上的第一个代码sn-p link
-
没有。从字面上看,这就是整个回购。为什么不只包含 cmake 配置?
-
我不知道该怎么做,你知道任何关于这个的stackoverflow帖子吗?
-
我相信只克隆 repo,add_subdirectory cmake 配置,然后只克隆
target_link_libraries(runscript PUBLIC leveldb)。.a文件只是目标文件,它们不包含标题。 没有的原因在于,与静态库的链接应该在其中添加包含和生成文件的搜索路径的路径。静态库只是目标文件的存档。头文件需要单独发货。
标签: cmake