单个目录中的 CMake 库目标、公共和私有标头

问题描述 投票:0回答:2

假设我有以下项目结构(继承代码 - 无法更改结构):

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

c++ cmake linker private
2个回答
0
投票

不,它们位于同一位置这一事实不应影响任何事情。


0
投票

CMakeLists.txt中的这条语句:

target_include_directories(MyLibrary PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/include)

意思是:

  • 任何链接目标
    MyLibrary
    的目标都应使用
    MyProject/include
    目录作为包含路径(因为使用了
    PUBLIC
    关键字)。

因此,其他目标将能够包含您的私有标头。

解决此问题的最佳方法是将私有标头移至

Src
目录。您无需更改任何其他内容。

© www.soinside.com 2019 - 2024. All rights reserved.