我一直在爲所有圖書館的工作項目之一創建包含柯南的軟件包。 我爲每個都創建了conanfile.py,一切都很好。 我爲虛擬代碼創建了一個conanfile.txt文件,以確保所有內容都按預期工作。 我已經運行如何讓柯南生成FindXXX.cmake?
柯南INSTAL .. --build =缺少
而且已經編譯所有的軟件包。我可以在我的CMake文件中使用$ {CONAN_INCLUDE_DIRS}和$ {CONAN_LIBS}。 但是我希望將柯南作爲一種可選方式來處理,使用Find_package(...)作爲獲取庫位置,鏈接和包含細節的方式。
所以我很好奇地看到柯南0.6
新!現在,柯南提供了對CMake find_package的自動支持,而不需要爲每個包創建一個自定義的FindXXX.cmake文件(conan 0.5)。
所以我認爲它應該工作。但是沒有生成FindXXX.cmake文件。
這是我conanfile.py爲的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"]
爲什麼沒有一個FineOpenMPI.cmake文件產生的?我如何確保它被創建? PS:如果我理解正確,則不需要軟件包方法。
謝謝您的回答。這澄清了事情。 OpenMPI是一個MPI實現。從某種意義上說,這是我可以選擇的圖書館中最糟糕的例子,因爲它應該由FIndPackage(MPI)發現。我想我可以聲明它是MPI而不是OpenMPI,並通過版本名稱或通過創建設置來選擇實現(MPIch或OpenMPI)來說明它是OpenMPI。其他庫(例如Lua)應該被找到。 – Michel
回到關於MPI的問題......(我可能會把另一個stackoverflow的問題)如果我有另一個庫,我想提供,並使用MPI,以便它應該與整個項目相同的MPI實現編譯,打包它並引用正確的MPI的最佳方法是什麼,以便在從源代碼編譯時找到正確的包含?我應該只使用'require'屬性嗎?如果這樣的話,設置如何傳遞下去? – Michel