避免在柯南配置文件和 CMake 之间重复配置

时间:2021-02-10 05:47:22

标签: cmake conan

我一直在为一个个人项目学习柯南,我有一个问题,我无法通过查看文档和示例来回答。

柯南的“个人资料”和 CMake 之间似乎缺乏互动。我的意思是:有许多不同的构建参数必须手动保持同步 - 使用与 conan install 期间选择的参数不同的参数运行 CMake 将导致构建错误。

举一个更具体的例子,这里是我的两个配置以及我将如何使用它们来构建:

$ cat ~/.conan/profiles/gcc_debug
[settings]
os=Linux
os_build=Linux
arch=x86_64
arch_build=x86_64
compiler=gcc
compiler.version=10
compiler.libcxx=libstdc++11
build_type=Debug
[options]
[build_requires]
[env]

$ export CC=/usr/bin/gcc
$ export CXX=/usr/bin/g++
$ conan install ../src --profile gcc_debug
$ cmake ../src -GNinja -DCMAKE_BUILD_TYPE=Debug
$ cmake --build .
$ cat ~/.conan/profiles/clang_cl_release
[settings]
os=Windows
os_build=Windows
arch=x86_64
arch_build=x86_64
compiler=Visual Studio
compiler.version=16
compiler.toolset=ClangCL
build_type=Release
[options]
[build_requires]
[env]

$ conan install ../src --profile clang_cl_release
$ cmake ../src -G"Visual Studio 16 2019" -TClangCL
$ cmake --build . --config=Release

在第一个例子中,我必须重复 gccDebug
在第二个中,我必须重复 Visual Studio16ClangCLRelease

不得不重复很多次感觉很糟糕,尤其是当这些选项分散在多个长时间运行的命令中时,忘记一个选项可能会导致不明显的错误消息。我也觉得奇怪的是,当您调用 cmake_basic_setup(); 时,柯南不只是强制(覆盖)适当的 CMake 变量;它已经知道它期望什么值,如果它们不匹配就会爆炸。

推荐的处理方法是什么?

2 个答案:

答案 0 :(得分:1)

通常您会使用 Conan 来设置所有外部库,然后从 CMake 使用它们。但是,您可以反过来做:让 CMake 调用 Conan 来安装外部依赖项。

来自 How to launch conan install from cmake 的示例代码:

/(?<!\d)
(\d{2}|1\d{2})\.\d+/g

答案 1 :(得分:0)

我刚刚开始研究 conan build,这看起来很有希望。我最初跳过这个是因为它看起来只适用于发布柯南包的人,但现在我认为它也适用于消费者。事实上,this page 甚至明确提到了我的问题陈述:

<块引用>

conan build 将使用 conan install 中使用的设置,这些设置已缓存在本地 conaninfo.txt 和构建文件夹中的文件中。这简化了过程并减少了安装包与当前项目配置之间不匹配的错误。 [...] 实现和使用 conanfile.py build() 方法确保我们在需求的安装和项目的构建中始终使用相同的设置,并简化了对构建系统的调用。

相关问题