C++ 模块:子命令失败

I.C*_*ner 5 c++ clion c++20 c++-modules

我正在 C++ 中测试模块,但不断收到以下错误:

linker input file unused because linking not done

ld: file not found: CMakeFiles/TestModule.dir/src/A.cppm.o
collect2: error: ld returned 1 exit status
ninja: build stopped: subcommand failed.
Run Code Online (Sandbox Code Playgroud)

这是我编写的以下代码:

模块:A.cppm

ld: file not found: CMakeFiles/TestModule.dir/src/A.cppm.o
collect2: error: ld returned 1 exit status
ninja: build stopped: subcommand failed.
Run Code Online (Sandbox Code Playgroud)

我的 main.cpp 文件:

export module A;

export namespace Lib_A {

    int getNumberOne() { return 1; }
    int getNumberTwo() { return 2; }

}
Run Code Online (Sandbox Code Playgroud)

现在我的 CMakeFile:

cmake_minimum_required(VERSION 3.24)
project(TestModule)

set(CMAKE_CXX_STANDARD 20)

add_executable(TestModule src/main.cpp src/A.cppm)
Run Code Online (Sandbox Code Playgroud)

我正在使用 CLion 顺便说一句,并查看了他们有关模块支持的文档,我似乎仍然无法弄清楚问题可能是什么。

我还在set(CMAKE_CXX_FLAGS "-fmodules-ts")我的 CMakeCXXCompiler.cmake 文件中添加了内容,因为这是建议我应该做的事情;然而,这并没有解决问题。

我对 C++ 相当陌生;希望有人能帮助我。感谢您的时间!!

Nat*_*wen 4

我今天遇到了同样的问题。解决方案是将.cppm扩展名更改为.cpp.

CMake 将许多文件扩展名识别为 C++。这些定义在CMAKE_CXX_SOURCE_FILE_EXTENSIONS. cppm包含在此列表中,至少对于 CMake 版本 3.25.1 而言是如此,所以我不确定为什么更改扩展名来.cpp解决该问题。也许其他人知道。考虑到 C++ 模块的新程度,这可能是一个错误。