本文档翻译自:https://docs.conan.io/en/latest/using_packages/conanfile_txt.html#options
我们已经看到在安装过程中可以指定一些设置。例如:**conan install .. -s build_type=Debug**。
这些设置通常是客户端计算机定义项目的配置,因此它们在包中不能有默认值。比如,对于包来说,将“ Visual Studio”声明为默认编译器是没有意义的,因为这是最终用户定义的东西,并且也无法在Linux中运行。
另一方面,选项适用于特定于软件包的配置,可以在配方中将其设置为默认值。例如,一个包可以定义其默认链接是静态的,如果消费者没有另外指定,则应使用此链接。
:::info
Note
你可以使用 conan get <reference> 命令检查配方,从而查看软件包的可用选项:
$ conan get poco/1.9.4@
要仅查看配方的特定字段,可以改用 conan inspect 命令:
$ conan inspect poco/1.9.4@ -a=options$ conan inspect poco/1.9.4@ -a=default_options
:::
例如,我们可以通过编辑conanfile.txt中的[options]部分来修改前一个示例,以使用动态链接而不是默认链接(静态链接):
[requires]poco/1.9.4[generators]cmake[options]poco:shared=True # PACKAGE:OPTION=VALUEopenssl:shared=True
安装需求并从build文件夹进行编译(如果不在Windows中,请更改CMake generator):
$ conan install ..$ cmake .. -G "Visual Studio 14 Win64"$ cmake --build . --config Release
作为在conanfile.txt文件中定义选项的替代方法,您可以直接在命令行中指定它们:
$ conan install .. -o poco:shared=True -o openssl:shared=True# or even with wildcards, to apply to many packages$ conan install .. -o *:shared=True
Conan将安装共享库软件包的二进制文件,并且该示例将与它们链接。您可以再次检查安装的不同二进制文件。例如,**conan search zlib/1.2.11@**。
最后,启动可执行文件:
$ ./bin/md5
发生了什么?失败是因为它在路径中找不到共享库。请记住,共享库是在运行时使用的,因此运行应用程序的操作系统必须能够找到它们。
我们可以检查生成的可执行文件,并查看它是否正在使用共享库。例如,在Linux中,我们可以使用objdump工具并查看“动态”部分:
$ cd bin$ objdump -p md5...Dynamic Section:NEEDED libPocoUtil.so.31NEEDED libPocoXML.so.31NEEDED libPocoJSON.so.31NEEDED libPocoMongoDB.so.31NEEDED libPocoNet.so.31NEEDED libPocoCrypto.so.31NEEDED libPocoData.so.31NEEDED libPocoDataSQLite.so.31NEEDED libPocoZip.so.31NEEDED libPocoFoundation.so.31NEEDED libpthread.so.0NEEDED libdl.so.2NEEDED librt.so.1NEEDED libssl.so.1.0.0NEEDED libcrypto.so.1.0.0NEEDED libstdc++.so.6NEEDED libm.so.6NEEDED libgcc_s.so.1NEEDED libc.so.6
