- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在学习 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/
我想弄清楚 this 到底是什么行是在这个 github json 项目的 cmake 文件中, add_library(${NLOHMANN_JSON_TARGET_NAME} INTERFACE)
我正在尝试运行 cmake 来生成 makefile。在最小的工作示例中,我有三个文件和 1 个构建目录。 文件 1 是 CMakeLists.txt,其中包含: add_library (MathF
我正在设计一组可以在我的其他 C++ 项目中链接的库。为了使馆藏易于使用,我希望能够链接到各个图书馆,或者链接到一个包含所有其他图书馆的主图书馆。我如何在 CMakeLists.txt 文件中指定它?
我正在使用 CMake add_library 命令构建一个共享库,如下所示: add_library(mylibname OPTION SHARED SOURCES ${source_files}
我在 github 上编写/维护了一个小型单元测试库 https://github.com/acgreek/ExtremeCUnit使用 cmake 构建。您可以在 checkout 后通过“cmak
我正在使用 add_library 在 CMAKE 中导入静态库.lib 导入正常。但我也想验证这一点。所以我这样做: add_library(MYLIB STATIC IMPORTED) set_t
我有一个只有标题的库项目。在我的 CMakeLists.txt 我使用 INTERFACE 库类型 我想将此项目导入 CLion,但是当我打开任何头文件时,IDE 会提示 此文件不属于任何项目目标 那
库至少需要 cpp14,但如果 cpp17 可用,它会解锁更多功能。我尝试了以下。 cmake_minimum_required(VERSION 3.10) project(dummy) add_li
我正在尝试使用来自库 https://github.com/trusch/libbcrypt 的 crypt blowfish 项目的 c 包装器还有一个 cpp 包装器围绕两个文件 bcrypt.c
TLDR: 我想让 CMake 等待 ExternalProject_Add 完成,然后再尝试移动到下一个子目录并构建一个恰好使用一个的库外部项目的文件。换句话说,我喜欢将外部项目声明为共享库的依赖项
Windows 64bit使用cmake编译c++项目:github.com/iHateInventNames/synergy-through-usb 我在这篇文章中修复了之前的一个问题:Compil
我有一个使用 CMake 作为构建工具的项目,并为我和我的同事制作了一个简单的模板。当我在网上搜索最佳且易于使用的实践时,我遇到了创建库的不同方法。 在这个模板中,我在两个单独的变量中列出了头文件和源
我正在尝试从一组 .cs 文件构建 CSharp DLL。我使用 add_library() 函数添加源文件(.cs 文件)。但它发出警告,如“add_library for library libn
我将我的凭据 key 存储在一个 cpp 原生文件中并使用 CMake 构建然后将其链接到我的应用程序: 当前代码: 我的 src/main/cpp/credentials-provider-dev.
CMake是2.8.8在编译时引入了OBJECT库类型:add_library(OBJECT)。这是一个有用的构造,能够将所有类编译为 .o 文件,但还没有将它们添加到库中。 但是,我不确定它最终附加
使用语句的目的是什么: add_library( [SHARED|STATIC] IMPORTED) 根据我的发现,即使您在上面创建了一个导入的库目标,您仍然需要指定实际 .so 或 .a 的具体位置
我正在学习 CMake,但有点吃力。我的“项目”正在使用以一个 .cpp 文件和两个 .h 文件的形式提供的 JsonCpp“库”。结构如下所示: myProject build/ j
我正在尝试为所有具有特定结尾的文件调用 add_library。 目录结构是: src | - CMakeLists.txt (1) | - main.cpp | - gui | -
我们使用 CMake 和普通的 Unix 生成文件进行构建。有一些静态分析检查,例如Cppcheck ,我们在项目中的每个 C/C++ 文件中运行以在编译时捕获错误。 我为 cppcheck 创建了一
我想向我在 Windows 7 中使用 Visual Studio 2013 Update 2 的 cmake 项目添加一个仅 header 目录。我做了一些研究并提出了这个 Cmakelists.t
我是一名优秀的程序员,十分优秀!