我可以对我的 conan 包的用户隐藏我的 link 标志吗?

Can I hide my link flags from users of my conan package?

假设我有一个库作为包上传到 conan 中,它使用 OpenGL,因此 links 和 GLCMakeLists.txt 中。库的用户是否需要再次明确 link 反对 GL?柯南有没有提供追踪的方法收录在${CONAN_LIBS}?

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

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

但是,如果在用户代码中我没有放置 link 标志,它会将 "undefined reference" 提升到 GL 的方法。

编辑:我在 linux mint 17 工作。

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

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

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

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