Tldr
在
Linux下通过cmake与Conan进行C++项目初始化与开发的一份简单指北
重要更新
其实目前也可以通过一个模板项目,例如 ModernCppStarter 来生成一个新项目,然后用 AI 帮助更改
CMakeLists.txt即可,这种方法可能更适合新手(如果你对 AI 发出了正确清晰的命令)
环境准备
首先,我们需要下载以下软件:
cmakemake或者ninjapython3pip或者pipxclang系列工具:clangd,clang(++),clang-format,clang-tidy- cppcheck
需要注意的是,CMake 的版本最好在 3.27 以上,可以根据 此教程 来安装最新版本的 CMake,目前的最新版本是 3.31
关于 clang 工具链的版本,可以根据 此教程 进行安装
软件安装
我们采用 cmake-init 来进行项目的初始化,并使用 Conan2 来作为包管理器,首先,我们通过 pip 安装:
pip install conan cmake-init在正式开始初始化项目前,我们需要先初始化包管理器 Conan2:
conan profile detect --force项目初始化
使用以下命令初始化一个名为 demo 的项目:
cmake-init demo经过一系列选择,我们得到的文件树如下:
.├── build├── cmake├── conan├── docs│ └── pages├── source└── test └── source在初始化时,如果包管理器选择为 Conan,那么会生成一个 conanfile.py ,里面描述了依赖的包:
from conan import ConanFile
class Recipe(ConanFile): settings = "os", "compiler", "build_type", "arch" generators = "CMakeToolchain", "CMakeDeps", "VirtualRunEnv"
def layout(self): self.folders.generators = "conan"
def requirements(self): self.requires("fmt/11.0.2")
def build_requirements(self): self.test_requires("catch2/3.7.0")我们首先安装这些包,使用命令:
conan install . -s build_type=Debug -b missing随后,Conan 会生成一个文件夹 conan,并在其中生成一系列 .cmake 文件
接着,我们使用 cmake 的新特性 Preset,这也是为什么我们需要 cmake 的版本大于 3.27 的原因:
cmake --preset=devcmake --build --preset=dev此时,我们就在 build/dev 文件下生成了一个可执行文件 demo,使用命令:
./build/dev/demo即可运行
使用第三方库
我们在 Conan 中可以搜索自己想要安装的包,例如 unordered_dense,然后,根据官网的说明,在 conanfile.py 与 CMakeLists.txt 中填入信息:

我们填入以下信息:
from conan import ConanFile
class Recipe(ConanFile): settings = "os", "compiler", "build_type", "arch" generators = "CMakeToolchain", "CMakeDeps", "VirtualRunEnv"
def layout(self): self.folders.generators = "conan"
def requirements(self): self.requires("fmt/11.0.2") self.requires("unordered_dense/4.4.0")
def build_requirements(self): self.test_requires("catch2/3.7.0")find_package(fmt REQUIRED)find_package(unordered_dense REQUIRED)target_link_libraries(demo_lib PUBLIC fmt::fmt unordered_dense::unordered_dense)Important
值得注意的是,在
CMakeLists.txt中指定的库,我们需要将其设置为PUBLIC,否则会导致链接失败