CMake:“SET(PODOFO_BUILD_SHARED NOT $ {PODOFO_BUILD_SHARED})”是什么意思?

时间:2013-11-07 10:13:50

标签: c++ build cmake

# 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变量的定义

1 个答案:

答案 0 :(得分:1)

  • 前4行采用2“布尔”变量PODOFO_BUILD_STATIC和PODOFO_BUILD_SHARED,如果两者都没有定义,则将它们设置为默认值
  • 如果仅定义PODOFO_BUILD_SHARED,则无论其初始值是什么,第二行反转PODOFO_BUILD_SHARED的值。的怪异!
  • 最后3行采用PODOFO_BUILD_STATIC的反转值,如果仅定义了PODOFO_BUILD_STATIC,则将其分配给PODOFO_BUILD_SHARED

然而,整体行为似乎有点奇怪。我的猜测就是这个(后三行):

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个变量中的一个,则将另一个设置为相反的值。

  

“SET(PODOFO_BUILD_SHARED NOT $ {PODOFO_BUILD_SHARED})”是什么意思?在那些片段之前,我看不到任何PODOFO_BUILD_SHARED变量的定义

可以通过多种方式预先在文件外部定义变量(例如,从命令行,或通过cmake-gui设置缓存变量)