簡體   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