本文档翻译自: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> 命令检查配方,从而查看软件包的可用选项:

    1. $ conan get poco/1.9.4@

    要仅查看配方的特定字段,可以改用 conan inspect 命令:

    1. $ conan inspect poco/1.9.4@ -a=options
    2. $ conan inspect poco/1.9.4@ -a=default_options

    :::

    例如,我们可以通过编辑conanfile.txt中的[options]部分来修改前一个示例,以使用动态链接而不是默认链接(静态链接):

    1. [requires]
    2. poco/1.9.4
    3. [generators]
    4. cmake
    5. [options]
    6. poco:shared=True # PACKAGE:OPTION=VALUE
    7. openssl:shared=True

    安装需求并从build文件夹进行编译(如果不在Windows中,请更改CMake generator):

    1. $ conan install ..
    2. $ cmake .. -G "Visual Studio 14 Win64"
    3. $ cmake --build . --config Release

    作为在conanfile.txt文件中定义选项的替代方法,您可以直接在命令行中指定它们:

    1. $ conan install .. -o poco:shared=True -o openssl:shared=True
    2. # or even with wildcards, to apply to many packages
    3. $ conan install .. -o *:shared=True

    Conan将安装共享库软件包的二进制文件,并且该示例将与它们链接。您可以再次检查安装的不同二进制文件。例如,**conan search zlib/1.2.11@**

    最后,启动可执行文件:

    1. $ ./bin/md5

    发生了什么?失败是因为它在路径中找不到共享库。请记住,共享库是在运行时使用的,因此运行应用程序的操作系统必须能够找到它们。

    我们可以检查生成的可执行文件,并查看它是否正在使用共享库。例如,在Linux中,我们可以使用objdump工具并查看“动态”部分:

    1. $ cd bin
    2. $ objdump -p md5
    3. ...
    4. Dynamic Section:
    5. NEEDED libPocoUtil.so.31
    6. NEEDED libPocoXML.so.31
    7. NEEDED libPocoJSON.so.31
    8. NEEDED libPocoMongoDB.so.31
    9. NEEDED libPocoNet.so.31
    10. NEEDED libPocoCrypto.so.31
    11. NEEDED libPocoData.so.31
    12. NEEDED libPocoDataSQLite.so.31
    13. NEEDED libPocoZip.so.31
    14. NEEDED libPocoFoundation.so.31
    15. NEEDED libpthread.so.0
    16. NEEDED libdl.so.2
    17. NEEDED librt.so.1
    18. NEEDED libssl.so.1.0.0
    19. NEEDED libcrypto.so.1.0.0
    20. NEEDED libstdc++.so.6
    21. NEEDED libm.so.6
    22. NEEDED libgcc_s.so.1
    23. NEEDED libc.so.6