CMake:如何防止 64 位构建?

CMake: How to prevent 64 bit build?

我有一个由两个子项目组成的 cmake 项目,比如项目 1 和项目 2。 项目 1 是一个可执行文件,应该是 32 位的。 项目 2 是一个库 (MODULE),我需要它的 32 位和 64 位版本。 我正在使用 visual studio 2022。现在,如果我 select 64 位(通过 x64 Release),恐怕 cmake 将为项目 1 构建 64 位可执行文件. 所以我想要一些 CMake 命令来确保项目 1 只能在 32 位上构建。 像

if(CMAKE_SIZEOF_VOID_P EQUAL 8)
##ABORT##

在项目 1 中。谢谢

只是在 cmake 配置期间发出致命错误。

if(NOT CMAKE_SIZEOF_VOID_P EQUAL 4)
    message(FATAL_ERROR "Project 1 must not be build for 64 bit; choose a configuration using 32 bit")
endif()

通常你会希望在你的 CMake 文件中避免这样的逻辑。 CMake 的最大好处之一是它通常只需要很少的努力就可以为不同的配置编译项目的二进制文件。如果您的项目的某些部分仅适用于某些配置,那么 user-friendly 为项目提供一个主要 CMakeLists.txt 可以做出适当的选择,而不会在配置期间导致错误。

完成此操作的一个好方法是有条件地在父目录中添加子目录 CMakeLists.txt

if(CMAKE_SIZEOF_VOID_P EQUAL 4)
    add_subdirectory(project1)
else()
    message("Not a 32 bit build; not adding Project 1")
endif()

add_subdirectory(project2)

即使使用这种方法,如果某些用户以非预期的方式使用您的项目并使用项目 1 作为源目录而不是您的主项目目录,您也应该将带有致命错误的代码段保留在子项目中以防止出现问题。