2017-08-09 1 views
1

Ich verwende Meson in ein paar C-Projekten (projectA und projectB), wo projectB Links zu einer Bibliothek von projectA. In projectA/meson.build habe ich eine pkg-configprojectA.pc Datei mit Meson geschrieben, die wie erwartet auf join_paths(get_option('prefix'), get_option('libdir'), 'pkgconfig') installiert ist.Set PKG_CONFIG_PATH innerhalb von meson.build

In projectB/meson.build verwende ich dependency('projectA'), um nach der Datei projectA.pc zu suchen.

Wenn ich eine benutzerdefinierte Installation Präfix projectA und projectB zu bauen meson ist nicht in der Lage projectA.pc zu finden, wenn projectB Gebäude. Gibt es eine Möglichkeit, eine PKG_CONFIG_PATH von projectB/meson.build zu spezifizieren?

Dieses Problem wird reproduzieren mit diesem minimal Beispiel:

projectA/meson.build:

project('projectA', 'c', version: '1') 

pkg = import('pkgconfig') 

pkg.generate(name : 'projectA', 
      description: 'ProjectA', 
      version: meson.project_version()) 

ProjectB/meson.build:

project('projectB', 'c', version: '1') 
dep = dependency('projectA') 

Befehle :

meson buildA projectA --prefix=$PWD/install 
(cd buildA && ninja install) 
#[0/1] Installing files. 
#Installing /tmp/test/buildA/meson-private/projectA.pc to /tmp/test/install/lib/x86_64-linux-gnu/pkgconfig 
# [ The error: ] 
meson buildB projectB --prefix=$PWD/install 
#Native dependency 'projectA' not found 
# [ My workaround: ] 
PKG_CONFIG_PATH="$PWD/install/lib/x86_64-linux-gnu/pkgconfig" meson buildB projectB --prefix=$PWD/install 
# Native dependency projectA found: YES 1 

Gibt es eine Möglichkeit projectB/meson.build zu sagen, dass dependency() in join_paths(get_option('prefix'), get_option('libdir'), 'pkgconfig') aussehen sollte?

Ich habe versucht, eine Umgebungsvariable in der Meson dependency() Rufaufbau haben, aber das env Argument existiert nicht für dependency():

pkgconfigpath = join_paths(get_option('prefix'), get_option('libdir'), 'pkgconfig') 
message('pkgconfig: @[email protected]'.format(pkgconfigpath)) 
env_pkgconfig = environment() 
env_pkgconfig.set('PKG_CONFIG_PATH', pkgconfigpath) 
projectA_dep = dependency('projectA', env: env_pkgconfig) 

Leider ist das env: Argument in Abhängigkeit ignoriert (es existiert nicht in die Dokumente).

Das Hinzufügen von $ {Präfix}/$ {libdir}/pkgconfig-Verzeichnis zu PKG_CONFIG_PATH von Meson macht für mich Sinn. Gibt es einen Weg, es zu tun?

Antwort

0

Nach der Frage auf der IRC wurde ich informiert, dass PKG_CONFIG_PATH sollte vom Benutzer festgelegt werden (nicht von mir) so Meson bietet keine Möglichkeit, es zu ändern.

Der beste Ansatz in diesem Fall wäre die Verwendung von Teilprojekten oder Wraps, so dass Meson alles auf einmal handhabt.

0

set PKG_CONFIG_PATH wo immer projectA 's .pc Datei ist, wenn Sie projectB erstellen.

Ja, PKG_CONFIG_PATH ist für Benutzer sicher. In diesem Zusammenhang, wer auch immer kompiliert Ihre projectA und projectB ist ein Benutzer, auch Sie sind.

ie) Wenn Sie projectB kompilieren möchten, weil Sie projectB mit einer neuen Version von projectA testen möchten, die in einem anderen Verzeichnis installiert ist, müssen Sie die PKG_CONFIG_PATH anpassen.

Und ja, es ist viel einfacher für Ihren Benutzer, wenn Sie projectB mit projectA als subproject einrichten.

Verwandte Themen