我可以对我的 conan 包的用户隐藏我的 link 标志吗?
Can I hide my link flags from users of my conan package?
假设我有一个库作为包上传到 conan 中,它使用 OpenGL,因此 links 和 GL
在 CMakeLists.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
未应用于您的目标。
假设我有一个库作为包上传到 conan 中,它使用 OpenGL,因此 links 和 GL
在 CMakeLists.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
未应用于您的目标。