我有一个非常简单的库,具有以下结构:
src
- myLib.h
- myLib.cpp
App
- testApp.cpp
CMakelist.txt
cmake_minimum_required(VERSION 3.10)
project(Testing)
# JSON
find_package(nlohmann_json REQUIRED)
add_library(myLib SHARED
src/myLib.cpp
)
target_link_libraries(myLib PUBLIC nlohmann_json::nlohmann_json)
set(CMAKE_BUILD_TYPE debug)
install(TARGETS myLib
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR})
install(DIRECTORY src/ DESTINATION include FILES_MATCHING PATTERN "*.h")
构建库工作正常,但是当我链接到仅包含 myLib.h 的 testApp.cpp 时,出现以下错误:
g++ testApp.cpp -o runApp -I ../install/include/ -l ../install/lib/libmyLib.so
./install/include/myLib.h:16:10: fatal error: nlohmann/json.hpp: No such file or directory
16 | #include <nlohmann/json.hpp>
这里可能出了什么问题?
当您链接库时,它们不一定会向您提供所有标头。为了从外部访问标头,您需要定义包含目录。
请查看
CMake Docs上的命令
include_directories
和 target_include_directories
来执行此操作。