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

标签 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 变量的任何定义

最佳答案

  • 前 4 行采用 2 个“ bool ”变量 PODOFO_BUILD_STATIC 和 PODOFO_BUILD_SHARED,如果它们都未定义,则将它们设置为默认值
  • 如果只定义了 PODOFO_BUILD_SHARED,则后 3 行反转 PODOFO_BUILD_SHARED 的值,无论其初始值是什么。 奇怪!
  • 如果只定义了 PODOFO_BUILD_STATIC,最后 3 行取 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 个变量中的一个,它将另一个设置为相反的值。

what does "SET(PODOFO_BUILD_SHARED NOT ${PODOFO_BUILD_SHARED})"means? before those snippet i cann't see any definition of PODOFO_BUILD_SHARED variable

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

关于c++ - CMake: "SET(PODOFO_BUILD_SHARED NOT ${PODOFO_BUILD_SHARED})"是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19833211/

相关文章:

c++ - 使用 .Copy 执行复制构造函数的最佳方法?

C++ STL Vector of lists 在列表末尾插入元素

c++ - 从指针 vector 中安全删除

c++ - crt1.o : In function `_start' : (.text+0x20): undefined reference to `main'

cmake - 在 Visual Studio 2019 中配置 CMake 版本

c++ - 在对象库中包含 CMake 目标的 header

c++ - 如何在没有项目的情况下在 Visual Studio 2012 中只编译一个文件(C++)?

Android,在构建时更改包名称和 Assets

powershell - 如何从 Powershell 设置 TeamCity 构建状态?

ios - Xcode 9.2 + 构建失败 : Invalid bitcode signature