【发布时间】:2021-10-25 04:08:26
【问题描述】:
我正在尝试将 assimp 添加到 cmake 构建中。我需要静态构建库,静态链接 msvc(/MT 用于发布,/MTd 用于调试)。似乎没有特定的 cmake 选项来启用/禁用 assimp 本身。我尝试了以下方法来强制库静态链接 msvc:
set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<CONFIG:Debug>:Debug>")
if(MSVC)
add_compile_options(
$<$<CONFIG:>:/MT> #---------|
$<$<CONFIG:Debug>:/MTd> #---|-- Statically link the runtime libraries
$<$<CONFIG:Release>:/MT> #--|
)
endif()
这两者似乎都没有任何效果,因为库继续构建为 /MD 或 /MDd。 assimp 是否有一个特定的标志来启用或禁用我找不到的静态链接 msvc?如果不是,我怎么能做到这一点?以下是我的CMakeLists.txt 文件的相关部分:
# SETUP ASSIMP
set(libAssimp assimp)
ExternalProject_Add(${libAssimp}
PREFIX ${CMAKE_CURRENT_BINARY_DIR}/_deps/${libAssimp}
GIT_REPOSITORY https://github.com/assimp/assimp.git
GIT_TAG v5.0.1
GIT_SHALLOW ON
UPDATE_COMMAND ""
CMAKE_ARGS -DCMAKE_INSTALL_PREFIX:PATH=${CMAKE_CURRENT_BINARY_DIR}/_deps/installs/${libAssimp}
-DASSIMP_BUILD_ALL_IMPORTERS_BY_DEFAULT:BOOL=OFF
-DASSIMP_BUILD_ALL_EXPORTERS_BY_DEFAULT:BOOL=OFF
-DASSIMP_BUILD_ASSIMP_TOOLS:BOOL=OFF
-DASSIMP_BUILD_TESTS:BOOL=OFF
-DASSIMP_BUILD_FBX_IMPORTER:BOOL=ON
-DASSIMP_BUILD_OBJ_IMPORTER:BOOL=ON
-DASSIMP_BUILD_OBJ_EXPORTER:BOOL=ON
-DASSIMP_BUILD_ZLIB:BOOL=ON
-DASSIMP_LIBRARY_SUFFIX:STRING=
-DLIBRARY_SUFFIX:STRING=
-DCMAKE_DEBUG_POSTFIX:STRING=
-DASSIMP_INJECT_DEBUG_POSTFIX:BOOL=OFF
-DBUILD_SHARED_LIBS:BOOL=OFF
)
set(ASSIMP_INSTALL_DIR ${CMAKE_CURRENT_BINARY_DIR}/_deps/installs/${libAssimp})
add_library(ASSIMP_LIBRARY STATIC IMPORTED)
set_target_properties(ASSIMP_LIBRARY PROPERTIES IMPORTED_LOCATION ${ASSIMP_INSTALL_DIR}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}assimp${CMAKE_STATIC_LIBRARY_SUFFIX})
add_library(IRRXML_LIBRARY STATIC IMPORTED)
set_target_properties(IRRXML_LIBRARY PROPERTIES IMPORTED_LOCATION ${ASSIMP_INSTALL_DIR}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}IrrXML${CMAKE_STATIC_LIBRARY_SUFFIX})
add_library(ZLIB_LIBRARY STATIC IMPORTED)
set_target_properties(
ZLIB_LIBRARY
PROPERTIES
IMPORTED_LOCATION_RELEASE ${ASSIMP_INSTALL_DIR}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}zlibstatic${CMAKE_STATIC_LIBRARY_SUFFIX}
IMPORTED_LOCATION_MINSIZEREL ${ASSIMP_INSTALL_DIR}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}zlibstatic${CMAKE_STATIC_LIBRARY_SUFFIX}
IMPORTED_LOCATION_RELWITHDEBINFO ${ASSIMP_INSTALL_DIR}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}zlibstatic${CMAKE_STATIC_LIBRARY_SUFFIX}
IMPORTED_LOCATION_DEBUG ${ASSIMP_INSTALL_DIR}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}zlibstaticd${CMAKE_STATIC_LIBRARY_SUFFIX}
)
更新
我相信我可能已经想通了。虽然我之前尝试将CMAKE_MSVC_RUNTIME_LIBRARY 和MSVC_RUNTIME_LIBRARY 添加到CMAKE_FLAGS 无济于事......我认为cmake 可能一直在缓存原始值,因为我只是尝试独立于我的超级构建下载assimp,确保缓存是使用上述标志清除和构建,VS 显示为/MT。一旦我用ExternalProject_Add确认这在我的超级版本中工作,我会报告。
UPDATE002
好的,IDK 我在上面的解释中是如何做到这一点的,但是我无法通过与以前相同的过程来复制它。清除了 cmake 缓存,使用了所有相同的选项,再次卡在 /MD 上。
【问题讨论】:
标签: c++ visual-c++ cmake assimp