15

私は Go 言語用の C バインディングを書き込もうとしていますが、Windows で Cgo コンパイルをセットアップするときに、一種の厄介な状況に遭遇しました。次のようなコードがあります。

// #cgo windows CFLAGS: -I C:/dev/extlibs/include/
// #cgo windows LDFLAGS: -lMyLib -L C:/dev/extlibs/lib/
// #include <mylib/mylib.h>
import "C"

これにより、DLL、ライブラリ、およびヘッダー ファイルを C:\Windows ディレクトリに直接インストールすることを回避できますが、他の開発者が別のファイル システム セットアップで作業している場合 (彼らはすべて、ライブラリをC:/dev/extlibs/... 内)。

コード内から環境変数を参照する方法はありますか? おそらく、次のようなものです。

// #cgo windows CFLAGS: -I $EXTLIBS$/include/

または、私が見逃したこの問題を人々が解決する別の方法はありますか? 私はこの件についてグーグルで時間をかけて調べましたが、有用なものはあまり見たことがありません。

4

2 に答える 2

9

環境変数を使用してみることができます。Safe C Flags の Gentoo Linux Wiki ページには、次の形式の例があります。

CXXFLAGS="${CFLAGS}"

だからあなたは次のようなことができるかもしれません

// #cgo windows CFLAGS: -I "${EXTLIBS}"/include/

しかし、私の構文はオフである可能性があり、それは Makefile 固有のものである可能性があります。

CPATH次のような環境変数を設定することもできます。

-I で指定されたかのように検索するディレクトリのリストを指定しますが、コマンド ラインの -I オプションで指定されたパスの後にします。この環境変数は、前処理される言語に関係なく使用されます。

に相当するのは、(リンクで説明されてい-Lます)だと思います。LIBRARY_PATHCPATH

http://golang.org/cmd/cgo/によると、プラットフォームに依存しない方法でこれを回避するため推奨される方法の1 つは、 pkg-configを使用することです。

// #cgo pkg-config: mylib otherlib

これは Windows ( http://ftp.gnome.org/pub/gnome/binaries/win32/dependencies/ ) で利用でき、この質問 (Windows に pkg config をインストールする方法は?) にインストールに関する詳細情報があります。

それ以外は、すべての依存関係を go-code のサブディレクトリに置き、 と で相対パスを使用しCFLAGSLDFLAGSバンドル全体を他の開発者と共有します。

于 2013-06-10T13:11:36.500 に答える