<div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr">I've written a custom CMake module (MyModule.cmake) and would like to install it in a sensible location on my system so my other CMake projects can find it easily.<div><br></div><div>First of all, is there an accepted standard way of doing this?</div><div>If not, is my approach below acceptable and considered good practice?</div><div><br></div><div>I have taken the following approach:</div><div><br></div><div><b>Project structure:</b></div><div><b><br></b></div><div><font face="monospace, monospace">MyModule</font></div><div><font face="monospace, monospace">    |---CMakeLists.txt</font></div><div><font face="monospace, monospace">    |---MyModule.cmake</font></div><div><font face="monospace, monospace">    |---MyModuleConfig.cmake</font></div><div><br></div><div><b>Contents of CMakeLists.txt:</b></div><div><b><br></b></div><div><div><font face="monospace, monospace">cmake_minimum_required(VERSION 3.13.0)</font></div><div><font face="monospace, monospace"><br></font></div><div><font face="monospace, monospace">project(MyModule)</font></div><div><font face="monospace, monospace"><br></font></div><div><font face="monospace, monospace">install(</font></div><div><font face="monospace, monospace">  FILES</font></div><div><font face="monospace, monospace">    ${CMAKE_CURRENT_SOURCE_DIR}/MyModuleConfig.cmake</font></div><div><font face="monospace, monospace">    ${CMAKE_CURRENT_SOURCE_DIR}/MyModule.cmake</font></div><div><font face="monospace, monospace">  DESTINATION</font></div><div><font face="monospace, monospace">    share/cmake/${PROJECT_NAME}</font></div><div><font face="monospace, monospace">)</font></div></div><div><font face="monospace, monospace"><br></font></div><div><font face="arial, helvetica, sans-serif"><b>Contents of MyModule.cmake:</b></font></div><div><font face="arial, helvetica, sans-serif"><b><br></b></font></div><div><font face="monospace, monospace">message(STATUS "included: my-module.cmake")</font><br></div><div><font face="monospace, monospace"><br></font></div><div><font face="arial, helvetica, sans-serif"><b>Contents of MyModuleConfig.cmake</b></font></div><div><font face="arial, helvetica, sans-serif"><b><br></b></font></div><div><font face="monospace, monospace" style=""># Add this module's directory to the "CMAKE_MODULE_PATH" so it is visible after calling "find_package()"</font></div><div><font face="monospace, monospace" style="">list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_LIST_DIR})</font><br></div><div><font face="arial, helvetica, sans-serif"><b><br></b></font></div><div><font face="arial, helvetica, sans-serif">--------------------------------</font></div><div><font face="arial, helvetica, sans-serif">The module can easily be built and installed with the following commands:</font></div><div><font face="arial, helvetica, sans-serif"><br></font></div><div><font face="monospace, monospace">cmake -S . -B build</font></div><div><font face="monospace, monospace">cmake --build build --target install</font></div><div><font face="monospace, monospace"><br></font></div><div><span style="font-family:arial,helvetica,sans-serif">--------------------------------</span></div><div>Once installed, the module can be used in any future CMake project as follows:</div><div><br></div><div><font face="monospace, monospace">find_package(MyModule)</font></div><div><font face="monospace, monospace">include(MyModule)</font></div><div><font face="monospace, monospace"><br></font></div><div><font face="arial, helvetica, sans-serif">This approach seems to work quite well and is very easy to use, but I feel like modifying "CMAKE_MODULE_PATH" from "MyModuleConfig.cmake" is not really a standard way of doing things because I've never seen it done before.</font></div><div><font face="arial, helvetica, sans-serif"><br></font></div><div><font face="arial, helvetica, sans-serif">Is this approach considered okay? Or is there a better more accepted way to easily make your own CMake modules visible from other projects?</font></div><div><font face="monospace, monospace"><br></font></div></div></div></div></div>