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

CMake: what does " SET(PODOFO_BUILD_SHARED NOT ${PODOFO_BUILD_SHARED})" means?

本文关键字:BUILD PODOFO SHARED 是什么 意思 SET CMake NOT      更新时间:2023-10-16
# 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 行采用 2 个"布尔"变量PODOFO_BUILD_STATIC和PODOFO_BUILD_SHARED,如果未定义它们,则将它们设置为默认值
  • 如果只定义了PODOFO_BUILD_SHARED,则后 3 行反转 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设置缓存变量)