4

たくさんのターゲットがあり、ターゲットごとにインクルード ディレクトリを設定しようとしています。

set_target_properties (foo PROPERTIES INCLUDE_DIRECTORIES ${CMAKE_Fortran_MODULE_DIRECTORY}/bar)

make VERBOSE=1これを Mac OS XI でビルド ( ) すると、

... -J../build/modules/foo -I../build/modules/bar

Linuxで同じことをすると、

... -J../build/modules/foo ...

唯一の違いは、Mac では cmake 2.8.8 を使用し、Linux では 2.8.7 を使用していることです。これは 2.8.8 より前のバージョンではサポートされていませんか?

4

1 に答える 1

4

この動作は、確かに 2.8.7 から 2.8.8 へのバージョン変更に対するものです。

変更ログから:

各ターゲットの INCLUDE_DIRECTORIES に対して ExpandVariablesInString を呼び出します

INCLUDE_DIRECTORIES に関するドキュメントを更新します。[...]

INCLUDE_DIRECTORIES ターゲット プロパティを最新の状態に保ちます。

INCLUDE_DIRECTORIES ターゲット プロパティを抽出して使用します。

特に興味深いのは、ドキュメントを変更するコミットです。これによるとINCLUDE_DIRECTORIES、2.8.7 のプロパティはディレクトリの読み取り専用プロパティでした。そのバージョンでは、ターゲット プロパティはまったく存在しませんでした。

CMake では任意のターゲット プロパティを設定できるため、スクリプトはエラーなく動作しますが、プロパティは CMake によって単に無視されます。

これは、必要最小限の正しいバージョンを常に指定する必要がある理由のもう 1 つの好例です。

于 2013-06-11T17:50:44.610 に答える