c++ - 如何CMake作为我的应用程序源而不是静态/共享库的一部分来编译库?

标签 c++ visual-studio-code cmake clion

我希望能够使用 CMake VSCode CLion 来与库同时调试我的应用程序。

.
+-- lib
|   +-- CMakeLists.txt
|   +-- lib.c
|   +-- lib.h
+-- app
|   +-- CMakeLists.txt
|   +-- app.c
|   +-- app.h
例如,假设我想使用{fmt}库作为我的应用程序源的一部分来编译我的应用程序,以在调试代码时查看fmt lib代码库中的流程。
显然,我不想将lib的cmake文件的所有命令复制到我的应用程序的cmake文件中,将lib的CMakeLists.txt链接到我的lib的方法是最好的。
最后,我的应用程序使用了静态/共享库,但是已经有一些关于此的问题以及开源世界中的一些示例。
仅供引用,我的应用程序的源文件使用#include <lib.h>
编辑:
我只是想澄清一点,使用{fmt}作为源要容易得多,因为它可以用作仅 header 文件的库。

最佳答案

我认为cmake的add_subdirectory(https://cmake.org/cmake/help/latest/command/add_subdirectory.html)确实可以满足您的需求。
它将库的CMakeLists.txt包含到您的项目中,您可以在target_link_libraries之类的函数中自由使用其目标。
简单示例:假设您已将fmt源代码 checkout 到fmt文件夹中。

.
+-- fmt (fmt source code)
+-- CMakeLists.txt
+-- main.cpp
CMakeLists.txt:
cmake_minimum_required(VERSION 3.0)
project(example)

add_subdirectory(fmt)

add_executable(${PROJECT_NAME} main.cpp)
target_link_libraries(${PROJECT_NAME} PUBLIC fmt)
main.cpp:
#include "fmt/core.h"
#include <iostream>

int main()
{
    std::cout << fmt::format("The answer is {}.", 42) << std::endl;
}

关于c++ - 如何CMake作为我的应用程序源而不是静态/共享库的一部分来编译库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64365575/

相关文章:

node.js - Visual Studio Code 中的启动后任务

visual-studio-code - 使用vscode删除重复的多行

c++ - CMake: "make depend"的用途是什么?

c++ - cmake Eigen find_package提示

ios - 处理 Podfile 的安装后 Hook 时出错。无法在 iOS 模拟器上运行 flutter 项目出现 pod 错误

c++ - 构建 Wt 项目时出错。无法打开包含文件 : 'boost/any.hpp'

c++ - BDM Sprite 文件与普通 Sprite 文件

c++ - 是否可以初始化不可复制对象的 vector vector ?

c++ - 如何在 OpenCASCADE 中更改 TopoDS_Shape 的底层几何形状

C++/C++11 使用初始化列表初始化对象的静态数组/vector 的有效方法,并支持基于范围的