У меня есть следующий код, чтобы попробовать найти wxWidgets 3.1 готовые библиотеки, используя CMake 3.7.1.CMake FindwxWidgets терпит неудачу только при первом вызове команды «configure»
set(wxWidgets_ROOT_DIR M:/wxWidgets)
set(wxWidgets_LIB_DIR M:/wxWidgets/lib/gcc510TDM_x64_dll)
set(wxWidgets_CONFIGURATION mswud)
find_package(wxWidgets 3.1 REQUIRED COMPONENTS core base stc)
include(${wxWidgets_USE_FILE})
target_link_libraries(MyTarget ${wxWidgets_LIBRARIES})
Генератор «CodeBlocks - MinGW Makefiles». И это в Windows 7. Таким образом, стиль поиска модуля FindwxWidgets - «win32».
Странно, что этот код всегда терпит неудачу при первом вызове команды «configure»/button, когда кеш CMake еще не установлен. И это будет успешным при последующем вызове «configure». И сообщение об ошибке
CMake Error at M:/cmake-3.7.1-win64-x64/share/cmake-3.7/Modules/FindPackageHandleStandardArgs.cmake:138 (message):
Could NOT find wxWidgets (missing: wxWidgets_LIBRARIES
wxWidgets_INCLUDE_DIRS) (Required is at least version "3.1")
Call Stack (most recent call first):
M:/cmake-3.7.1-win64-x64/share/cmake-3.7/Modules/FindPackageHandleStandardArgs.cmake:378 (_FPHSA_FAILURE_MESSAGE)
M:/cmake-3.7.1-win64-x64/share/cmake-3.7/Modules/FindwxWidgets.cmake:929 (find_package_handle_standard_args)
CMakeLists.txt:16 (find_package)
Я новичок в CMake. Это нормально? Предполагается, что модуль FindwxWidgets работает таким образом?
Ниже содержимое кэша CMake после первого (не удалось) "Configure":
//Cleared.
wxWidgets_LIB_DIR:PATH=wxWidgets_LIB_DIR-NOTFOUND
...
...
//wxWidgets_LIB_DIR
WX_LIB_DIR:INTERNAL=wxWidgets_LIB_DIR-NOTFOUND
//wxWidgets_ROOT_DIR
WX_ROOT_DIR:INTERNAL=M:/wxWidgets
Ниже приведены содержимое кэша CMake после последующего (успешного) "Configure":
//Path to a file.
_filename:FILEPATH=M:/wxWidgets/include/wx/version.h
//Set wxWidgets configuration (mswud;mswu)
wxWidgets_CONFIGURATION:STRING=mswud
//Cleared.
wxWidgets_LIB_DIR:PATH=wxWidgets_LIB_DIR-NOTFOUND
//Location of wxWidgets resource file compiler binary (wxrc)
wxWidgets_wxrc_EXECUTABLE:FILEPATH=wxWidgets_wxrc_EXECUTABLE-NOTFOUND
...
...
//Details about finding wxWidgets
FIND_PACKAGE_MESSAGE_DETAILS_wxWidgets:INTERNAL=[M:/wxWidgets/lib/gcc510TDM_x64_dll/libwxmsw31ud_core.a;M:/wxWidgets/lib/gcc510TDM_x64_dll/libwxbase31ud.a;M:/wxWidgets/lib/gcc510TDM_x64_dll/libwxmsw31ud_stc.a;M:/wxWidgets/lib/gcc510TDM_x64_dll/libwxpngd.a;M:/wxWidgets/lib/gcc510TDM_x64_dll/libwxtiffd.a;M:/wxWidgets/lib/gcc510TDM_x64_dll/libwxjpegd.a;M:/wxWidgets/lib/gcc510TDM_x64_dll/libwxzlibd.a;M:/wxWidgets/lib/gcc510TDM_x64_dll/libwxregexud.a;M:/wxWidgets/lib/gcc510TDM_x64_dll/libwxexpatd.a;winmm;comctl32;rpcrt4;wsock32][M:/wxWidgets/lib/gcc510TDM_x64_dll/mswud;M:/wxWidgets/include][v3.1.0(3.1)]
//wxWidgets_LIB_DIR
WX_LIB_DIR:INTERNAL=M:/wxWidgets/lib/gcc510TDM_x64_dll
//wxWidgets_ROOT_DIR
WX_ROOT_DIR:INTERNAL=M:/wxWidgets
я опустил ключи, которые предназначены для отдельных компонентов WxWidgets, такие как "WX_zlib: Filepath", или "WX_zlib-Advanced: ВНУТРЕННЕЕ" и т.д.
'Это нормально' - Нет, как правило, алгоритм поиска должен дать * настойчивые * результаты? , Код «FindwxWidgets.cmake» использует некоторую «чистую» логику, когда находит вещи в каталогах, отличных от 'wxWidgets_ROOT_DIR' или' wxWidgets_LIB_DIR'. Вероятно, такая логика вызывает поведение, которое вы наблюдаете. Не могли бы вы предоставить ** содержимое CMake cache ** после первого (неудачного) «configure» и второго? Это даст ключ. Интересны только записи в кеш, начинающиеся с 'wx' или' WX_'. BTW, пример использует букву драйвера в верхнем регистре ('C: /'), но ваш код использует строчный регистр ('m: /'). Это может иметь значение. – Tsyvarev
@ Цыварев На основании вашего комментария я перерисовал cmake-gui и захватил содержимое кэша CMake. Я соответствующим образом обновил этот вопрос. Благодаря! – thebat
@ Цыварев Я нашел обходное решение. Я удалил команды набора для 'wxWidgets_ROOT_DIR' и' wxWidgets_LIB_DIR'. Вместо этого я установил переменную окружения 'wxWidgets_ROOT_DIR' и переместил предварительно созданные файлы библиотеки в одно из мест, которое будет искать FindwxWidgets.cmake. – thebat