【问题标题】:CMake header file that includes header files from other directory包含来自其他目录的头文件的 CMake 头文件
【发布时间】:2020-08-05 16:57:03
【问题描述】:

鉴于这棵树:

project
 + lib
    + include
        + include_both.h
    + source
        + file1.cpp
        + file1.h
        + file2.cpp
        + file2.h
 + main_dir
    + main.cpp

使用 CMake 将 lib 链接到 main_dir 后,我希望头文件 file1.h 和 file2.h 在 main.cpp 中不可见。我希望该库只能由 include_both.h 头文件包含。如何做到这一点,我什至应该这样做吗?

【问题讨论】:

    标签: c++ cmake include subdirectory


    【解决方案1】:

    您可以尝试将include 目录设为PUBLIC 之一,以便库的使用者可以看到它,但请保持source 目录为私有:

    add_library(MyLib SHARED 
        source/file1.cpp
        source/file2.cpp
    )
    
    target_include_directories(MyLib 
        PUBLIC  include
        PRIVATE source
    )
    

    【讨论】:

    • 似乎有效,谢谢!。但我还有一个问题要问。在 include_both.h 我必须指定路径,例如。 #include "../source/file1.h"。我可以用 CMake 更改它,以便 #include "file1.h" 就足够了,还是保持原样更好?
    • @vixu 没有意识到您只是在公共标头中包含私有标头,这基本上只是一个重定向。在这种情况下,main.cpp 的用户可以通过类似地包含 "../source/file1.h" 来访问私有标头,正如您所解释的那样。这是正确的设计吗?这取决于您,并且可能基于您项目的几个属性,如 here 所讨论的那样。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-08-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-26
    • 2013-11-21
    • 1970-01-01
    相关资源
    最近更新 更多