#cmake
#cmake
Вопрос:
Это ошибка CMake, или у меня может быть ошибка? Кто-нибудь может указать, как устранить проблему? Любая помощь будет принята с благодарностью.
Во-первых, я перечислил DLL-файлы стороннего целевого объекта. Я верю, что все в порядке.
project(assimp)
add_library(${PROJECT_NAME} SHARED IMPORTED GLOBAL)
set(ASSIMP_ROOT ${CMAKE_CURRENT_LIST_DIR})
set(ASSIMP_NAME "assimp-vc142-mt")
set_target_properties(${PROJECT_NAME} PROPERTIES
INTERFACE_INCLUDE_DIRECTORIES "${ASSIMP_ROOT}/include"
IMPORTED_IMPLIB_RELEASE "${ASSIMP_ROOT}/lib/${ASSIMP_NAME}.lib"
IMPORTED_IMPLIB_DEBUG "${ASSIMP_ROOT}/lib/${ASSIMP_NAME}d.lib"
IMPORTED_LOCATION_RELEASE "${ASSIMP_ROOT}/bin/${ASSIMP_NAME}.dll"
IMPORTED_LOCATION_DEBUG "${ASSIMP_ROOT}/bin/${ASSIMP_NAME}d.dll")
Затем я захотел использовать эту библиотеку, и возникла проблема.
cmake_minimum_required(VERSION 3.15)
include(cmake/Functions.cmake)
project(my_show_case)
add_subdirectory(thirdparty)
add_executable(${PROJECT_NAME})
file(GLOB_RECURSE srcs ${CMAKE_CURRENT_LIST_DIR}/include/*.h ${CMAKE_CURRENT_LIST_DIR}/src/*.cpp)
target_sources(${PROJECT_NAME} PUBLIC ${srcs})
target_include_directories(${PROJECT_NAME} PRIVATE ${CMAKE_CURRENT_LIST_DIR}/include/)
get_property(ASSIMP_DEBUG_LIB TARGET assimp PROPERTY IMPORTED_LOCATION_DEBUG)
get_property(ASSIMP_RELEASE_LIB TARGET assimp PROPERTY IMPORTED_LOCATION_RELEASE)
# This section would get a wrong file name which has a '>' suffix
set(MY_Lib $<$<CONFIG:Debug>:${ASSIMP_DEBUG_LIB}>$<$<CONFIG:Release>:${ASSIMP_RELEASE_LIB}>)
get_filename_component(FILENAME "${MY_Lib}" NAME)
# prints: "assimp-vc142-mt.dll>"
file(GENERATE OUTPUT TestOut.txt CONTENT "${FILENAME}")
Файл TestOut.txt бы напечатал «assimp-vc142-mt.dll >», как вы можете видеть, у него есть суффикс «>».
Комментарии:
1.
get_filename_component
разрешается во время настройки, а не во время сборки. Выражения генератора не будут работать.2. @KamilCuk о, в этом дело! Большое спасибо!! Кстати, как я могу справиться с этой ситуацией?
3. «как я могу справиться с этой ситуацией?» — Просто используйте отдельные вызовы
get_filename_component
, один дляASSIMP_DEBUG_LIB
и один дляASSIMP_RELEASE_LIB
. Затем объедините результаты с выражениями генератора, как вы делаете вMY_Lib
переменной.4. @Tsyvarev понял и очень признателен. Просто разделите функцию времени сборки и функцию времени выполнения, чтобы заставить ее работать