cmake - 生成器表达式将 WIN32 变量计算为真,即使不在 Windows 上也是如此

标签 cmake

我在 Ubuntu 上工作,这是我的 CMake 代码的一部分(有问题的部分在最后一句):

include(ExternalProject)
ExternalProject_Add(fftw3_external
  URL
    http://www.fftw.org/fftw-3.3.8.tar.gz
  URL_HASH
    MD5=8aac833c943d8e90d51b697b27d4384d
  DOWNLOAD_NO_PROGRESS
    1
  UPDATE_COMMAND
    ""
  LOG_CONFIGURE
    1
  LOG_BUILD
    1
  LOG_INSTALL
    1
  CMAKE_ARGS
    -DCMAKE_INSTALL_PREFIX=${STAGED_INSTALL_PREFIX}
    -DBUILD_TESTS=OFF
  CMAKE_CACHE_ARGS
    -DCMAKE_C_FLAGS:STRING=$<$<BOOL:WIN32>:-DWITH_OUR_MALLOC>
  )

配置后我查看相应的缓存文件 fftw3_external-cache.cmake,它显示:

set(CMAKE_C_FLAGS "-DWITH_OUR_MALLOC" CACHE STRING "Initial cache" FORCE)

但是这个内容对应WIN32为真。为什么会这样?

最佳答案

生成器表达式

$<BOOL:WIN32>

CMake 将“WIN32”计算为一个字符串,而不是一个变量。因为此字符串不对应于任何错误模式,所以它被评估为 TRUE。

您需要取消引用变量以检查其值:

$<BOOL:${WIN32}>

关于cmake - 生成器表达式将 WIN32 变量计算为真,即使不在 Windows 上也是如此,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53425282/

相关文章:

build - 使用 CMake 安装 ExternalProject

c++ - 为什么谷歌测试可以编译但看不到我的项目源代码?

cuda - 从主机 CMake 单独编译 CUDA 内核

cmake - 将 Googletest 添加到现有的 CMake 项目

CMake找不到源码目录(安装Eigen)

cmake - 如何在 CMake 的 execute_process 中传递列表变量?

CMake 在 add_library 的链接阶段末尾添加 -ldl

c++ - 在 C++ 项目中包含 Pistache

CMake:添加可编译文件类型

c++ - 使用 CMake 构建项目,然后向 VS 添加更多库