头图

介绍

也许你曾经只用过C/C++的集成IDE(如VSstudio、DEV-CPP、Clion)来管理你的项目,这些IDE自带C/C++的库(第三方依赖)管理与项目结构管理的功能,极为方便。

但为了更好的跨平台性与可实时编译性,特别是对于一些开源项目来说,我极不推荐使用IDE自带的项目管理功能。因为这会导致项目对IDE产生依赖。

为了不借助IDE而能更好地管理自己的项目,我发现CMake与Conan可以构成一个不错的组合。
CMake是项目结构的管理工具,而Conan则是项目的库管理工具。

接下来,由我来演示如何通过它们构建一个稳定的工作流。

前置软件

在使用Cmake与Conan管理C/C++项目前,首先要安装它们。
(注:以下只展示Linux-Debian系列下的安装方式,Windows可以直接到对应软件的官网去下载)

更新软件源

sudo apt-get update

安装Cmake

sudo apt-get install cmake

安装Conan

由于Conan是用Python编写的,所以我们先要安装Python(Python3版本以上)

sudo apt-get install python3

接下来,通过Python自带的pip包管理器来安装Conan

sudp pip install conan

OK!接下来是项目的配置环节

项目配置

首先要在项目的根目录下创建2个文件:'CMakeLists.txt' 和 'conanfile.py'

为了方便演示Conan与CMake配置文件的集成配置,我这边假设我的项目要依赖一个名为Boost的C++库。

CMakeLists.txt的配置

这是CMake的项目配置文件。

cmake_minimum_required(VERSION 3.10)  
  
project(MyProject)  
  
# 引入Conan的CMake模块  
list(APPEND CMAKE_MODULE_PATH ${CMAKE_BINARY_DIR})  
list(APPEND CMAKE_PREFIX_PATH ${CMAKE_BINARY_DIR})  
include(${CMAKE_BINARY_DIR}/conanbuildinfo.cmake)  
conan_basic_setup(TARGETS) # 如果你使用的是Conan 1.X或更新版本,并且希望使用目标(targets)  
  
# 添加你的源文件  
add_executable(my_app main.cpp)  
  
# 链接Boost库(使用Conan提供的目标)  
target_link_libraries(my_app CONAN_PKG::boost)

conanfile.py的配置

这是Conan的配置文件

from conans import ConanFile, CMake, tools  
  
class MyProjectConan(ConanFile):  
    settings = "os", "compiler", "build_type", "arch"  
    requires = "boost/1.78.0"  

    #明确Conan需要与Cmake相配合
    generators = "cmake"  
  
    def build(self):  
        cmake = CMake(self)  
        cmake.configure()  
        cmake.build()  
  
    def package(self):  
        self.copy("*.h", dst="include", src=".")  
        self.copy("*.dll", dst="bin", src="bin", keep_path=False)  
        self.copy("*.dylib*", dst="bin", src="lib", keep_path=False)  
        self.copy("*.so*", dst="bin", src="lib", keep_path=False)  
        self.copy("*.a", dst="lib", src=".")  
  
    def package_info(self):  
        self.cpp_info.libs = ["libboost_system-mt", "libboost_thread-mt"]

项目的构建

安装依赖

conan install . --build=missing

使用CMake配置并构建项目

cmake .. -DCMAKE_BUILD_TYPE=Release
cmake --build . --config Release

很好!接下来我们便可以愉快地 Hello World 了!(Doge)


愚人猫
9 声望0 粉丝

现世的挣扎者……