# How can I build cppm in cmake environment?

**URL:** https://discourse.cmake.org/t/how-can-i-build-cppm-in-cmake-environment/11717
**Category:** Code
**Tags:** os:linux
**Created:** [September 18, 2024, 12:32am UTC](https://discourse.cmake.org/t/how-can-i-build-cppm-in-cmake-environment/11717 "2024-09-18T00:32:24Z")
**Posts on this page:** 2
**Page:** 1

<div class="post-metadata">

### Author: ![David\_Lee](https://discourse.cmake.org/letter_avatar_proxy/v4/letter/d/ee59a6/32.png) [@David\_Lee](https://discourse.cmake.org/u/David_Lee)
#### Post date: [September 18, 2024, 12:32am UTC](https://discourse.cmake.org/t/how-can-i-build-cppm-in-cmake-environment/11717/1 "2024-09-18T00:32:24Z")

</div>

The code is simple.

```sh
├── **CMakeLists.txt**
├── **Hello.cppm**
├── Hello.out
├── Hello.pcm
├── README.md
├── **Use.cpp**
└── **build**

```

- Hello.cppm

```c++
module;
#include <iostream>
export module Hello;
export void hello() {
  std::cout << "Hello World!\n";
}

```

- Use.cpp

```c++
// use.cpp
import Hello;
int main() {
  hello();
  return 0;
}

```

- command line build is OK

```sh
clang++ -std=c++20 Hello.cppm --precompile -o Hello.pcm
clang++ -std=c++20 use.cpp -fprebuilt-module-path=. Hello.pcm -o Hello.out
./Hello.out 
Hello World!

```

- However, if you build after creating CMakeLists.txt, the Hello module’s not found.

- CMakeLists.txt

```auto
cmake_minimum_required(VERSION 3.10)

project(HelloProject)

set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_STANDARD_REQUIRED True)

set(CMAKE_CXX_COMPILER clang++)

set(COMMON_COMPILE_OPTIONS -std=c++20)

add_custom_command(
    COMMAND ${CMAKE_CXX_COMPILER} ${CMAKE_SOURCE_DIR}/Hello.cppm ${COMMON_COMPILE_OPTIONS} --precompile
    OUTPUT ${CMAKE_BINARY_DIR}/Hello.pcm
    COMMENT "Precompiling Hello.cppm to Hello.pcm"
)

add_custom_target(HelloModule DEPENDS ${CMAKE_BINARY_DIR}/Hello.pcm)

add_executable(UseApp Use.cpp)

add_dependencies(UseApp HelloModule)

target_compile_options(UseApp PRIVATE ${COMMON_COMPILE_OPTIONS} -fprebuilt-module-path=.)

```

- result

```sh
Consolidate compiler generated dependencies of target UseApp
[66%] Building CXX object CMakeFiles/UseApp.dir/Use.cpp.o
clang: warning: argument unused during compilation: '-fprebuilt-module-path=.' [-Wunused-command-line-argument]
/mnt/d/workspace/modern-cpp/ProC++/cppm/Use.cpp:2:8: fatal error: module 'Hello' not found
import Hello;
~~~~~~~^~~~~
1 error generated.
make[2]: *** [CMakeFiles/UseApp.dir/build.make:76: CMakeFiles/UseApp.dir/Use.cpp.o] Error 1
make[1]: *** [CMakeFiles/Makefile2:110: CMakeFiles/UseApp.dir/all] Error 2
make: *** [Makefile:91: all] Error 2

```

If anyone has any advice on writing cmake regarding the cppm module, please respond.  
Thank you.

---

<div class="post-metadata">

### Author: ![ClausKlein](https://discourse.cmake.org/user_avatar/discourse.cmake.org/clausklein/32/352_2.png) [@ClausKlein](https://discourse.cmake.org/u/ClausKlein)
#### Post date: [September 18, 2024, 5:34am UTC](https://discourse.cmake.org/t/how-can-i-build-cppm-in-cmake-environment/11717/2 "2024-09-18T05:34:50Z")

</div>

See

- [How to install CXX\_MODULES\_BMI right without strange errors?](https://discourse.cmake.org/t/how-to-install-cxx-modules-bmi-right-without-strange-errors/9675)
- [Scanning Control in 3.28 for module dependencies](https://discourse.cmake.org/t/scanning-control-in-3-28-for-module-dependencies/9191)
- [C++20 Modules, CMake, And Shared Libraries - Crascit](https://crascit.com/2024/04/04/cxx-modules-cmake-shared-libraries/#h-consuming-installed-c-20-modules)
