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