[英]How to add “jni/*.c/cpp” files to CMakeLists.txt file?
[英]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...)
,因為列出的任何具有PUBLIC
或INTERFACE
可見性的來源也將成為鏈接目標的一部分。
我個人傾向於在創建目標的命令中列出始終屬於目標的源和標頭,並使用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.