1
# If the user hasn't told use specifically what they want, build only
# a static library.

IF(NOT DEFINED PODOFO_BUILD_SHARED AND NOT DEFINED PODOFO_BUILD_STATIC)
   SET(PODOFO_BUILD_STATIC TRUE)
   SET(PODOFO_BUILD_SHARED FALSE)
ENDIF(NOT DEFINED PODOFO_BUILD_SHARED AND NOT DEFINED PODOFO_BUILD_STATIC)

IF(DEFINED PODOFO_BUILD_SHARED AND NOT DEFINED PODOFO_BUILD_STATIC)
    SET(PODOFO_BUILD_SHARED NOT ${PODOFO_BUILD_SHARED})
ENDIF(DEFINED PODOFO_BUILD_SHARED AND NOT DEFINED PODOFO_BUILD_STATIC)

IF(NOT DEFINED PODOFO_BUILD_SHARED AND DEFINED PODOFO_BUILD_STATIC)
    SET(PODOFO_BUILD_SHARED NOT ${PODOFO_BUILD_STATIC})
ENDIF(NOT DEFINED PODOFO_BUILD_SHARED AND DEFINED PODOFO_BUILD_STATIC)

「SET(PODOFO_BUILD_SHARED NOT ${PODOFO_BUILD_SHARED})」とはどういう意味ですか? これらのスニペットの前に、PODOFO_BUILD_SHARED 変数の定義が表示されません

4

1 に答える 1

1
  • 最初の 4 行は、2 つの「boolean」変数 PODOFO_BUILD_STATIC と PODOFO_BUILD_SHARED を取り、それらが両方とも定義されていない場合、デフォルト値に設定します。
  • 2 番目の 3 行は、初期値が何であれ、PODOFO_BUILD_SHARED のみが定義されている場合、PODOFO_BUILD_SHARED の値を反転します。変!
  • 最後の 3 行は PODOFO_BUILD_STATIC の反転値を取得し、PODOFO_BUILD_STATIC のみが定義されている場合は PODOFO_BUILD_SHARED に割り当てます。

ただし、全体的な動作は少し奇妙に思えます。私の推測では、これです(2番目の3行):

IF(DEFINED PODOFO_BUILD_SHARED AND NOT DEFINED PODOFO_BUILD_STATIC)
    SET(PODOFO_BUILD_SHARED NOT ${PODOFO_BUILD_SHARED})
ENDIF(DEFINED PODOFO_BUILD_SHARED AND NOT DEFINED PODOFO_BUILD_STATIC)

次のようにする必要があります。

IF(DEFINED PODOFO_BUILD_SHARED AND NOT DEFINED PODOFO_BUILD_STATIC)
    SET(PODOFO_BUILD_STATIC NOT ${PODOFO_BUILD_SHARED})
ENDIF(DEFINED PODOFO_BUILD_SHARED AND NOT DEFINED PODOFO_BUILD_STATIC)

このようにすれば、より理にかなっています。2 つの変数のうちの 1 つだけが定義されている場合、もう 1 つの変数は反対の値に設定されます。

「SET(PODOFO_BUILD_SHARED NOT ${PODOFO_BUILD_SHARED})」とはどういう意味ですか? これらのスニペットの前に、PODOFO_BUILD_SHARED 変数の定義が表示されません

変数は、いくつかの方法でファイルの外部で事前に定義されている場合があります (たとえば、コマンド ラインから、または を介し​​てキャッシュされた変数を設定するcmake-gui) 。

于 2013-11-07T12:11:08.543 に答える