我正在尝试使用以下目录结构构建一个库:
lib1
|-include
| |-lib1
| |-public.h
|-src
| |-private.h
| |-private.cpp
| |-public.cpp
|-lib
| |-liblib1.a
|-CMakeLists.txt
公共(public) header 是否包含私有(private) header 以使用其功能。
我的
CMakeLists.txt
如下所示:project(math)
set(SRC_FILES src/private.cpp src/public.cpp)
add_library(${PROJECT_NAME} STATIC ${SRC_FILES})
target_include_directories(
${PROJECT_NAME}
PUBLIC
"${CMAKE_CURRENT_SOURCE_DIR}/include"
PRIVATE
"${CMAKE_CURRENT_SOURCE_DIR}/src"
)
set_target_properties(
${PROJECT_NAME}
PROPERTIES
ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/lib"
)
但是当我尝试构建库时,我收到了来自
public.h
的错误。说没有文件private.h
谷歌搜索时,我发现很旧的帖子不使用
target_include_directories
或者它们通过将所有文件放在同一目录中来支持不干净的结构
最佳答案
如果包含标题,则必须说明该标题的位置。如果您说 header 是私有(private)的,那么您并没有告诉 header 对于依赖项的位置。当依赖项通过公共(public)的包含私有(private) header 时,他们不知道它在哪里。
解决方案:将公共(public) header 包含的所有 header 设为公开。或者换一种说法:不要在公共(public)标题中包含私有(private)标题。
关于c++ - CMake target_include_directories 找不到私有(private) header 的#include,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61632771/