На самом деле, версии стандарта C ++ до того, как C ++ 11 определили ключевое слово «export», [] , можно просто объявить шаблоны в файле заголовка и реализовать их в другом месте.
К сожалению, ни один из популярных компиляторов не реализовал это ключевое слово. Единственный, о котором я знаю, - это интерфейс, написанный Edison Design Group, который используется компилятором Comeau C ++. Все остальные настаивали на том, что вы пишете шаблоны в заголовочных файлах, нуждающихся в определении кода для надлежащего создания экземпляра (как уже указывали другие).
В результате стандартная комиссия ISO C ++ решила удалить export
особенность шаблонов, начинающихся с C ++ 11.
Я считаю, что «модуль» CMake - это просто файл, который можно использовать с директивой find_package
. То есть, когда вы запускаете find_package (Module)
, он ищет файл в MODULE_PATH с именем FindModule.cmake
.
При этом, если вы включаете
файл без расширения, он также будет искать этот file.cmake
в вашем MODULE_PATH. В проекте CMake, над которым я работаю, у меня очень похожая структура каталогов на то, что вы предлагаете.
+ root/
+ CMakeLists.txt
+ cmake/
| + FindMatlab.cmake
| + TestInline.cmake
| + stdint.cmake
+ src/
+ include/
В CMakeLists.txt у меня есть:
set (CMAKE_MODULE_PATH "${CMAKE_MODULE_PATH};${CMAKE_CURRENT_SOURCE_DIR}/cmake")
find_package (Matlab) # runs FindMatlab.cmake
include(TestInline) # defines a macro:
test_inline (CONFIG_C_INLINE)
include(stdint) # simply executes flat CMake code
Возможно, ваша проблема в том, что вы пытаетесь определить путь к модулю из среды. Вместо этого попробуйте просто добавить к нему в тот самый CMakeList, который вы пытаетесь получить для доступа к модулям / файлам.