介绍
也许你曾经只用过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)
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。