Для команды cmake «include», в чем разница между файлом и модулем?

На самом деле, версии стандарта C ++ до того, как C ++ 11 определили ключевое слово «export», [] , можно просто объявить шаблоны в файле заголовка и реализовать их в другом месте.

К сожалению, ни один из популярных компиляторов не реализовал это ключевое слово. Единственный, о котором я знаю, - это интерфейс, написанный Edison Design Group, который используется компилятором Comeau C ++. Все остальные настаивали на том, что вы пишете шаблоны в заголовочных файлах, нуждающихся в определении кода для надлежащего создания экземпляра (как уже указывали другие).

В результате стандартная комиссия ISO C ++ решила удалить export особенность шаблонов, начинающихся с C ++ 11.

35
задан Steve314 15 July 2010 в 05:19
поделиться

1 ответ

Я считаю, что «модуль» 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, который вы пытаетесь получить для доступа к модулям / файлам.

39
ответ дан 27 November 2019 в 06:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: