繁体   English   中英

我应该如何在此 CMakeLists.txt 文件中添加 C++ header 文件?

[英]How should I add C++ header files in this CMakeLists.txt file?

在此处输入图像描述

CMakeLists.txt

add_library(systems
AtomTypes.cc
AtomTypingVariants.cc
BuildPolymerChain.cc
CartesianAtoms.cc
CartesianChains.cc
SimpleAtomTyping.cc
)

add_subdirectory(surpass)

target_link_libraries(systems
PRIVATE
surpass
)

我添加了源文件,现在需要在上面的文件中添加header个文件。

以上文件是否正确?

我应该如何在上面的CMakeLists.txt文件中添加header 个文件?

我应该将target_sources()PUBLIC限定符或add_libraries()一起使用吗?

对于构建逻辑,无论您是否将 header 文件添加到源列表都没有区别。 我建议添加它们 n.netheless,因为这会导致像 Visual Studio 这样的 IDE 将这些文件列为目标的源。 您可以在与翻译单元(.cc 文件)相同的位置列出这些 header 文件。

add_library(...
    AtomTypes.cc
    AtomTypes.hh
    ...
)

我应该将target_sources()PUBLIC限定符或add_libraries()一起使用吗?

您可以选择使用target_sources还是add_libraries添加源或标头。 一般来说,您应该使用target_sources(... PRIVATE...) ,因为列出的任何具有PUBLICINTERFACE可见性的来源也将成为链接目标的一部分。

我个人倾向于在创建目标的命令中列出始终属于目标的源和标头,并使用target_sources作为添加有条件包含的源的方法。 不过,您也可以为此目的创建列表变量。

add_library(foo STATIC
    a.cpp
    a.hpp
    b.cpp
    b.hpp
    c.hpp
)

if (WIN32)
    target_sources(foo PRIVATE c.win.cpp)
else()
    target_sources(foo PRIVATE c.other.cpp)
endif()

或者

set(SOURCES
    a.cpp
    b.cpp
)

set(HEADERS
    a.hpp
    b.hpp
    c.hpp
)

if (WIN32)
    list(APPEND SOURCES c.win.cpp)
else()
    list(APPEND SOURCES c.other.cpp)
endif()

add_library(foo STATIC ${HEADERS} ${SOURCES})

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM