【问题标题】:Add linker flag during conan install在柯南安装期间添加链接器标志
【发布时间】:2021-02-15 08:54:31
【问题描述】:

我正在从事一个使用许多外部库的项目。这些库是使用柯南包含的。该项目主要是为 Unix 编写的,但也需要在 Windows 上编译和运行。

我当前的问题是 Windows 默认 fopen()O_TEXT,而 Unix 期望这是 O_BINARY。我有一个适用于我自己的代码的修复程序,只需在链接时包含 binmode.obj 即可将此默认值更改为 O_BINARY。

问题是这不会影响我的第三方库。谷歌搜索并没有出现太多,大多数建议似乎是基于您在哪里创建自己的包并希望添加标志,而不是在使用其他包时如何添加标志。

到目前为止我所尝试的:

  1. binmode.obj 出现在库之前,以防链接顺序很重要。没有区别。
  2. 已将 --env 'CL=link binmode.obj' 添加到 conan install,但此标志并未最终成为编译标志或链接标志的一部分。

有什么我可以尝试的建议吗?

编辑:关于“CL”无效,我错了。这是由混淆的输出引起的。但我确实观察到 CL 似乎同时适用于编译器和链接器,这使得给出什么标志有点挑战。使用“/link”前缀使其可以与编译器一起使用,但不能与链接器一起使用。

编辑 2:更多混乱...我没有意识到 CL 值的语法是:"<compile flags> /link <link flags>"。但是,它影响了编译,但不影响链接。所以这个环境变量显然不能用来让柯南为基于自动工具的包添加一个链接器标志。

【问题讨论】:

    标签: visual-c++ conan


    【解决方案1】:

    Hi Mats L 欢迎来到我们的社区! 我曾经遇到过类似的问题,我最终做的事情很hacky,但也很简单:

    在我位于 ~/.conan/profiles/default 的柯南配置文件或任何其他配置文件中,实际上我添加了一个环境变量,如下所示: CXX=/usr/bin/clang++ -fms-compatibility。这让我用这个标志编译了所有的 c++ 源代码(可以理解 windows 特定的代码)。

    因此,在您的情况下,您可以运行 which c++ 来查找编译器的位置 并在您使用的最终文件的柯南配置文件中编辑 CXX 环境变量可能如下所示:

    [settings]
    os=Macos
    os_build=Macos
    arch=x86_64
    arch_build=x86_64
    compiler=clang
    compiler.version=11
    compiler.libcxx=libc++
    build_type=Release
    [options]
    [build_requires]
    [env]
    CXX=c++ --required_flag
    

    一些附加说明:您可能还希望在 CC 环境变量上设置此标志。 最好不要更改默认配置文件,而是复制它(比如说在一个名为 default_edited_copy 的文件上),然后使用 conan ... --profile default_edited_copy 调用另一个配置文件

    【讨论】:

    • 我同意那是骇人听闻的...我没有尝试 CXX 环境变量,但我确实尝试了 automake 应该听的其他变量,例如 LDFLAGS。显然,Windows 的处理方式有所不同,这可能是它不起作用的原因。最后,我最终使用了 libjpeg-turbo,而不是使用 CMake。然后我可以使用 LDFLAGS 环境变量来注入我的链接器标志...
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-01
    • 1970-01-01
    相关资源
    最近更新 更多