Пользовательский файл Find * .cmake находит разные библиотеки в зависимости от типа сборки Visual Studio (Debug / Release)

Я создаю несколько библиотек C ++ в проекте (решение в терминологии VS), который должен использоваться в двух других проектах. Для этого я создал файл FindDQSAnalyticsInfra.cmake, который выглядит следующим образом:

# DQSAnalyticsInfra
# -----
# Find the path to DQSAnalyticsInfra header files and libraries
#
# DEFINES
# ------
# DQSINFRA_ROOT - Root of the DQSAnalyticsInfra project
# DQSINFRA_INCLUDE_DIR - DQSAnalyticsInfra include directory
# DQSINFRA_LIBRARIES - Libraries required to link DQSAnalyticsInfra
# DQSINFRA_FOUND - Confirmation

set(DQSINFRA_LIBRARIES_LIST Utils Actor gtest)

find_path(DQSINFRA_INCLUDE_DIR Actor/Actor.h Utils/Log.h gtest/gtest/gtest.h
${DQSINFRA_ROOT}/include
)

foreach(search_lib ${DQSINFRA_LIBRARIES_LIST})
find_library(DQSINFRA_LIB NAMES ${search_lib}
PATHS
${DQSINFRA_ROOT}/lib/Release #The problem is here
)
set(DQSINFRA_LIBRARIES ${DQSINFRA_LIBRARIES} ${DQSINFRA_LIB})
if(DQSINFRA_LIB)
unset(DQSINFRA_LIB CACHE)
set(DQSINFRA_FOUND TRUE)
else(DQSINFRA_LIB)
set(DQSINFRA_FOUND FALSE)
break()
endif(DQSINFRA_LIB)
endforeach(search_lib)

if(DQSINFRA_INCLUDE_DIR AND DQSINFRA_LIBRARIES AND DQSINFRA_FOUND)
set(DQSINFRA_FOUND TRUE)
message(STATUS "Found DQSAnalyticsInfra. ")
message(STATUS "Include Path: ${DQSINFRA_INCLUDE_DIR}")
message(STATUS "Libraries ${DQSINFRA_LIBRARIES}")
else(DQSINFRA_INCLUDE_DIR AND DQSINFRA_LIBRARIES AND DQSINFRA_FOUND)
set(DQSINFRA_FOUND FALSE)
message(STATUS "DQSAnalyticsInfra not found.")
endif(DQSINFRA_INCLUDE_DIR AND DQSINFRA_LIBRARIES AND DQSINFRA_FOUND)

mark_as_advanced(DQSINFRA_INCLUDE_DIR DQSINFRA_LIBRARIES)

Этот файл отлично работает. Проблема в том, что в команде find_library, используемой в этом файле, я жестко прописал путь как $ {DQSINFRA_ROOT} / lib / Release. Это означает, что я не могу использовать этот файл для ссылки на сборки отладки (мне нужно вручную изменить файл, чтобы использовать $ {DQSINFRA_ROOT} / lib / Debug). Любая идея о том, как это можно исправить. Спасибо.

0

Решение

использование debug а также optimized ключевые слова, которые можно указать для target_link_libraries:

find_library(DQSINFRA_LIB_DEBUG NAMES ${search_lib}
PATHS
${DQSINFRA_ROOT}/lib/Debug
)

find_library(DQSINFRA_LIB_RELEASE NAMES ${search_lib}
PATHS
${DQSINFRA_ROOT}/lib/Release
)

set(DQSINFRA_LIBRARIES optimized ${DQSINFRA_LIB_RELEASE} debug ${DQSINFRA_LIB_DEBUG})
4

Другие решения


По вопросам рекламы [email protected]