I am currently working on a project that embeds another library into its own source tree via git submodules. This is currently convenient because the library’s development is very much tied to the host project and having them both in the same CMake project cuts down dramatically on iteration times. Yet, that library already has its own conan dependencies in a
conanfile.txt. Because I did not want to duplicate the dependency information from the library, I decided to pull those into my host projects requirements programmatically using a
Luckily, you can use conan’s own tools for that:
from conans.client.loader import ConanFileTextLoader def load_library_conan(recipe_folder): text = Path(os.path.join(recipe_folder, "libary_folder", "conanfile.txt")).read_text() return ConanFileTextLoader(text)
You can then use that in your stage methods, e.g.:
def config_options(self): for line in load_library_conan(self.recipe_folder).options.splitlines(): (key, value) = line.split("=", 2) (library, option) = key.split(":", 2) setattr(self.options[library], option, value) def requirements(self): for x in load_library_conan(self.recipe_folder).requirements: self.requires(x)
I realize this is a niche application, but it helped me very much. It would be cool if conan could delegate into subfolders natively, but I did not find a better way to do this.