gpt4 book ai didi

c++ - 我应该只对原始 cpp 文件使用 add_executable() 还是通过 add_library() 创建一个库?

转载 作者:太空宇宙 更新时间:2023-11-04 12:40:24 27 4
gpt4 key购买 nike

我正在学习 CMake,但有点吃力。我的“项目”正在使用以一个 .cpp 文件和两个 .h 文件的形式提供的 JsonCpp“库”。结构如下所示:

myProject
build/

json/
CMakeLists.txt
jsoncpp.cpp
include/
json.h
json-forward.h

CMakeLists.txt
main.cpp

构建/CMakeLists.txt:

cmake_minimum_required(VERSION 3.6.0)
project(myProject)
add_subdirectory(json)
add_executable(app main.cpp)
target_link_libraries(app PRIVATE json)
# add_executable(app main.cpp json/jsoncpp.cpp json/include/json.h json/include/json-forwards.h)

json/CMakeLists.txt:

cmake_minimum_required(VERSION 3.6.0)

add_library(
json
jsoncpp.cpp
include/json.h
include/json-forwards.h
)

target_include_directories(json PUBLIC '${CMAKE_CURRENT_SOURCE_DIR}/include')

仅对所有 .cpp 文件使用 add_executable() 与使用将 jsoncpp 转换为静态库然后链接它的 target_link_libraries 之间有什么区别?我应该选择什么方法?

接下来让我感到困惑的是 target_include_directories()。使用这个功能有什么好处?如果我评论它,并运行 cmake(然后生成文件并启动应用程序),一切仍然正常。如果我从 add_library() 中删除“include/json.h”“include/json-forward.h”,一切仍然有效。

最佳答案

What's a difference between using only add_executable() with all .cpp files and using target_link_libraries that transforms jsoncpp into static library and then link it? What approach should I choose?

当您有 2 个使用相同 jsoncpp 代码的可执行文件时,需要使用 add_library。在这种情况下,如果您在两个 add_executable() 调用中都列出了 jsoncpp 源,则必须编译它两次。将它们分组到 add_library() 将使它只编译一次,然后链接到两个可执行文件。

使用 add_library 的另一个原因是模块的纯逻辑组合。

关于c++ - 我应该只对原始 cpp 文件使用 add_executable() 还是通过 add_library() 创建一个库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54497465/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com