gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 09:51:23 25 4
gpt4 key购买 nike

我希望能够使用 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/

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