How to link with Apple Frameworks¶
It is common in OSx that your conan package needs to link with a complete Apple framework, and, of course, you want to propagate this information to all projects/libraries that uses your package.
With regular libraries we use
self.cpp_info.libs object to append to it all the libraries:
def package_info(self): self.cpp_info.libs = ["SDL2"] self.cpp_info.libs.append("OpenGL32")
With frameworks we need to declare the “-framework flag” as a linker flag:
def package_info(self): self.cpp_info.libs = ["SDL2"] self.cpp_info.exelinkflags.append("-framework Carbon") self.cpp_info.exelinkflags.append("-framework CoreAudio") self.cpp_info.exelinkflags.append("-framework Security") self.cpp_info.exelinkflags.append("-framework IOKit") self.cpp_info.sharedlinkflags = self.cpp_info.exelinkflags
In the previous example we are using
self.cpp_info.exelinkflags. If we are using CMake to consume this package, it will only link those
frameworks if we are building an executable and
sharedlinkflags will only apply if we are building a shared library.
If we are not using CMake to consume this package
exelinkflags are used indistinctly.
In the example above we are assigning in the last line
exelinkflags, so no matter what the consumer will build,
it will indicate to the linker to link with the specified frameworks.