CMake-C++ Modules最小示例

9rnv2umw  于 5个月前  发布在  其他
关注(0)|答案(1)|浏览(65)

由于cmake 3.28 release和他们的first example,我试图创建一个最小的例子与Module Partitions
这是我当前的最小示例,CMakeFile.txt

// Point2D.cxx
export module Math:Point2D;

export
struct Point2D
{
    int x_{};
    int y_{};
};
// Math.cxx
export module Math;
export import :Point2D;
// CMakeFile.txt
cmake_minimum_required(VERSION 3.28)
project(modules VERSION 0.1.0 LANGUAGES CXX)

set(CMAKE_CXX_STANDARD 23)
set(CMAKE_CXX_SCAN_FOR_MODULES OFF)

add_library(Math-Point2D)
target_sources(Math-Point2D PUBLIC FILE_SET CXX_MODULES FILES
${CMAKE_CURRENT_SOURCE_DIR}/src/Math/Point2D.cxx
)

add_library(Math)
target_link_libraries(Math PRIVATE Math-Point2D)
target_sources(Math PUBLIC FILE_SET CXX_MODULES FILES
${CMAKE_CURRENT_SOURCE_DIR}/src/Math/Math.cxx
)

add_executable(modules main.cpp)
target_link_libraries(modules PRIVATE Math)

我还尝试只创建一个库,并将两个文件插入到同一个库中,如下所示:

add_library(Math)
target_sources(Math PUBLIC FILE_SET CXX_MODULES FILES
${CMAKE_CURRENT_SOURCE_DIR}/src/Math/Point2D.cxx
${CMAKE_CURRENT_SOURCE_DIR}/src/Math/Math.cxx
)


但似乎没有一个工作,我已经尝试与Makefile,并与make似乎(只是编译两个文件分开,并在最后链接所有.)
任何想法?我没有看到任何逻辑创建模块,如果我不能创建分区.

zzlelutf

zzlelutf1#

CMAKE_CXX_SCAN_FOR_MODULES设置为OFF
这将 * 禁用 * main.cpp的依赖扫描,因此该文件中来自import s的模块依赖将不会被视为构建依赖。
不要设置这个选项。
此外,您提到您正在使用Makefiles。CMake的Module支持不适用于Makefiles生成器,正如in the documentation明确指出的那样:
支持扫描C++模块源代码的生成器列表包括:

  • 忍者
  • Ninja多配置
  • Visual Studio 17 2022

相关问题