Ich habe Pakete mit Conan für alle Bibliotheken erstellt eines der Projekte, die ich arbeite verwendet. Ich habe eine conanfile.py für jeden erstellt und alles ist gut. Ich habe eine conanfile.txt für einen Dummy-Code erstellt, um sicherzustellen, dass alles wie erwartet funktioniert. Ich habeWie kann Conan ein FindXXX.cmake erzeugen?
conan instal .. --build =
fehlt laufen Und das hat alle Pakete zusammengestellt. Ich kann $ {CONAN_INCLUDE_DIRS} und $ {CONAN_LIBS} in meinen CMake-Dateien verwenden. Allerdings möchte ich Conan als eine optionale Möglichkeit haben, Dinge zu tun, mit Find_package (...) als eine Möglichkeit, Bibliotheksstandorte zu erhalten, verknüpfen und Details einfügen.
So war ich fasziniert
Neu in Conan 0,6 zu sehen! Conan bietet jetzt automatische Unterstützung für CMake find_package, ohne eine eigene Datei FindXXX.cmake für jedes Paket zu erstellen (conan 0.5).
Also ich dachte, es sollte funktionieren. Es wird jedoch keine FindXXX.cmake-Datei generiert.
Hier ist eine meiner conanfile.py als Beispiel für OpenMPI:
from conans import ConanFile
import os
from conans.tools import download
from conans.tools import unzip
from conans import CMake
from conans import ConfigureEnvironment
class OpenMPIConan(ConanFile):
name = "OpenMPI"
version = "2.0.0"
generators = "cmake"
settings = "os", "arch", "compiler", "build_type"
url="https://www.open-mpi.org/software/ompi/v2.0/"
license="https://www.open-mpi.org/community/license.php"
source_url = "https://www.open-mpi.org/software/ompi/v2.0/downloads/openmpi-2.0.0.tar.bz2"
unzipped_path = "openmpi-2.0.0/"
def source(self):
self.zip_name = os.path.basename(self.source_url)
download(self.source_url, self.zip_name)
unzip(self.zip_name)
os.unlink(self.zip_name)
def build(self):
self.run("%s/%s/configure --enable-mpi-thread-multiple --enable-mpi-cxx --prefix=%s CC=clang CXX=clang++" % (self.conanfile_directory, self.unzipped_path, self.package_folder))
self.run("%s make -j 8 install" % env.command_line)
def package(self):
self.copy("*.h", dst="include", src="install/include")
self.copy("*.lib", dst="lib", src="install/lib")
self.copy("*.a", dst="lib", src="install/lib")
def package_info(self):
self.cpp_info.libs = ["mpi", "mpi_cxx"]
Warum gibt es kein FineOpenMPI.cmake Datei erstellt? Wie kann ich sicherstellen, dass es erstellt wird?
PS: Wenn ich richtig verstehe, gibt es keine Notwendigkeit für die Paketmethode.
Vielen Dank für Ihre Antwort. Das klärt die Dinge. OpenMPI ist eine MPI-Implementierung. Es ist in gewissem Sinne das schlechteste Beispiel unter den Bibliotheken, die ich hätte auswählen können, weil es von FIndPackage (MPI) gefunden werden sollte. Ich denke, ich könnte erklären, dass es MPI anstelle von OpenMPI ist und die Tatsache, dass es OpenMPI ist, entweder durch den Versionsnamen oder durch Erstellen einer Einstellung, um die Implementierung (MPIch oder OpenMPI) auszuwählen. Andere Bibliotheken (z.B. Lua) sollten gefunden werden. – Michel
Zurück zum Thema MPI ... (Ich kann eine andere Stackoverflow-Frage dafür stellen) Wenn ich eine andere Bibliothek habe, die ich bereitstellen möchte und die MPI verwendet, damit sie mit der gleichen MPI-Implementierung wie das komplette Projekt kompiliert werden soll , was ist der beste Weg, um es zu verpacken und Verweis auf die richtige MPI, so dass, wenn es von der Quelle kompiliert wird, die richtigen enthalten sind gefunden? Soll ich einfach das 'requires'-Attribut verwenden? Wie werden die Einstellungen weitergegeben, wenn das so ist? – Michel