库链接和标头包含如何与 CMAKE 配合使用

  • 本文关键字:CMAKE 链接 包含如 c++ cmake
  • 更新时间 :
  • 英文 :


我是CMAKE的新手。 如果你觉得我的问题很愚蠢,请原谅我。

我的项目中有以下场景。

我必须在librarytwo中使用库libraryone

可能 CMakeLists.txt 对于库二看起来像

cmake_minimum_required(VERSION 3.5)
find_package(libraryone REQUIRED)
add_library(librarytwo STATIC librarytwo.cpp)
target_link_libraries(librarytwo PUBLIC lib1::libraryone)

我的librarytwo.h和librarytwo.cpp看起来像

图书馆二.h

#include <src/lib1/libraryone.h>
--------
-------

图书馆二.cpp

#include <librarytwo.h>
---------
--------

我的图书馆两个正在正确构建。

现在我想在库三中使用库二

所以我的 CMakeList.txt for librarythree

看起来像
cmake_minimum_required(VERSION 3.5)
add_library(librarythree STATIC librarythree.cpp)
target_include_directories(librarythree PRIVATE ${CMAKE_SOURECE_DIR}/src/lib2}
target_link_libraries(librarythree PRIVATE librarytwo)

我的 librarythree.cpp 和 libraythree.h 看起来像

图书馆三.H

#include <src/lib2/librarytwo.h>
--------
-------

图书馆三.cpp

#include <librarythree.h>
---------
--------

但是在构建库三时,我在库三.h中出错说libraryone.h : No such file or directory

所以,它为librarytwo.h工作,我已经将librarytwo链接到librarythree。 那么我错过了什么?帮助赞赏。

发生这种情况是因为您包括了librarytwo.h,而又包括libraryone.h。您需要在库 3 中添加一个target_include_directories语句,告诉它在哪里可以找到libraryone.h

最新更新