【问题标题】:Can I hide my link flags from users of my conan package?我可以对我的柯南包的用户隐藏我的链接标志吗?
【发布时间】:2016-02-13 15:15:31
【问题描述】:

假设我在conan 中以包的形式上传了一个库,它使用 OpenGL,并在CMakeLists.txt 中与GL 链接。图书馆的用户是否需要再次明确链接到 GL?柯南是否提供了一种方法来跟踪它并将其包含在${CONAN_LIBS}中?

我在docs 中找到的最接近的东西是方法package_info,您似乎可以在其中指定链接器额外选项,但我似乎没有在我的库的conanfile.py 中正确使用它。我都试过了:

    self.cpp_info.sharedlinkflags = ["-lGL", "GL", "libGL", "libGL.so", "-llibGL.so"] 

但如果在用户代码中我没有放置链接标志,它会引发对 GL 方法的“未定义引用”。

编辑:我正在使用 linux mint 17。

【问题讨论】:

  • 如果您说明您使用的操作系统可能会有所帮助。

标签: c++ linker-flags conan


【解决方案1】:

是的,您需要在 conanfile.py package_info() 方法中声明它,因为柯南将构建(在您的 cmake 文件中定义)与包管理分离。 cpp_info 属性中有一个库的特定属性,您可以使用它:

def package_info(self):
    self.cpp_info.libs = ["GL"]

这个libs 字段在依赖项之间是可传递的,GL lib 将包含在${CONAN_LIBS} 变量中

sharedlinkflags 也是可传递的,它以在 cmake 变量 ${CMAKE_SHARED_LINKER_FLAGS} 中累积的值结束。但正如其名称所述,它仅用于共享链接,因此您可能没有构建这样的共享库,因此您的 lib 标志为 GL 并未应用于您的目标。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多