假设我有以下项目结构(继承代码 - 无法更改结构):
MyProject
├── CMakeLists.txt
├── src
│ └── foo.cpp
│ └── bar.cpp
├── include
│ └── foo_public.h
│ └── foo_private.h
│ └── bar_public.h
│ └── bar_private.h
CMakeLists.txt:
cmake_minimum_required(VERSION 3.16)
project(MyProject)
add_library(MyLibrary
foo.cpp
bar.cpp)
target_include_directories(MyLibrary PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/include)
set_target_properties(MyLibrary PROPERTIES PUBLIC_HEADER foo_public.h bar_public.h)
install(TARGETS MyLibrary
LIBRARY DESTINATION ${INSTALL_LOCATION}/lib
PUBLIC_HEADER DESTINATION ${INSTALL_LOCATION}/include)
这是否允许其他可执行文件/库链接到安装位置的
MyLibrary
,而无需查看私有头文件?
公共和私有标头都位于传递给
target_include_directories
的同一位置,这重要吗?
注意:目标环境是Red Hat Enterprise Linux
不,它们位于同一位置这一事实不应影响任何事情。
CMakeLists.txt中的这条语句:
target_include_directories(MyLibrary PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/include)
意思是:
MyLibrary
的目标都应使用 MyProject/include
目录作为包含路径(因为使用了 PUBLIC
关键字)。因此,其他目标将能够包含您的私有标头。
解决此问题的最佳方法是将私有标头移至
Src
目录。您无需更改任何其他内容。