C++ CMake Visual Studio调试/发布查找程序包
我使用cmake在Windows、Linux和OSX上构建。在Windows上,我使用预先生成的.dll和.lib文件,并将其放在project/Windows/bin、project/Windows/include和project/Windows/lib文件夹中。这些文件夹包含windows的所有第三方依赖项。在我的CMakeLists.txt中,我使用:C++ CMake Visual Studio调试/发布查找程序包,c++,visual-studio,cmake,C++,Visual Studio,Cmake,我使用cmake在Windows、Linux和OSX上构建。在Windows上,我使用预先生成的.dll和.lib文件,并将其放在project/Windows/bin、project/Windows/include和project/Windows/lib文件夹中。这些文件夹包含windows的所有第三方依赖项。在我的CMakeLists.txt中,我使用: if(WIN32) set(CMAKE_PREFIX_PATH ${PROJECT_SOURCE_DIR}/windows) endi
if(WIN32)
set(CMAKE_PREFIX_PATH ${PROJECT_SOURCE_DIR}/windows)
endif()
find_package(SDL2 REQUIRED)
find_package(GLEW REQUIRED)
它可以工作,但我只能使用库的一种配置。我希望能够链接库的不同配置,如调试和发布
问题是:
如何使我的visual studio项目设置为调试时,它将使用库的调试版本,并在我将visual studio项目设置为发布时使用库的发布版本
我是否需要以不同方式设置我的/windows库目录
提前感谢我现在确定您使用的
FindSDL2
和FindGLEW
模块是否提供。如果是这样的话,那么您可能会选择相应的库作为debug和release,并且您应该使用导入的目标进行链接
否则,您有两个选择:
优化调试
:
target_link_libraries(MyConsumerTarget
PUBLIC optimized <LIB1_release>
debug <LIB1_debug>)
target\u link\u库(MyConsumerTarget
公共优化
调试)
if(NOT TARGET External::lib1) # this if is required for subsequent runs of CMake
add_library(External::lib1 SHARED IMPORTED GLOBAL)
set_target_properties(External::lib1
PROPERTIES INTERFACE_INCLUDE_DIRECTORIES "${PROJECT_SOURCE_DIR}/windows/include"
IMPORTED_LINK_INTERFACE_LANGUAGES "C"
IMPORTED_LOCATION_RELEASE "${PROJECT_SOURCE_DIR}/windows/bin/<LIB1_release>.dll"
IMPORTED_IMPLIB_RELEASE "${PROJECT_SOURCE_DIR}/windows/lib/<LIB1_release_importlib>.lib"
IMPORTED_LOCATION_DEBUG "${PROJECT_SOURCE_DIR}/windows/bin/<LIB1_debug>.dll"
IMPORTED_IMPLIB_DEBUG "${PROJECT_SOURCE_DIR}/windows/lib/<LIB1_debug_importlib>.lib")
endif()
target_link_libraries(MyConsumerTarget
Public External::lib1)
if(非TARGET External::lib1)#后续运行CMake时需要此if
添加库(外部::lib1共享导入全局)
设置\u目标\u属性(外部::lib1
属性接口\u INCLUDE\u目录“${PROJECT\u SOURCE\u DIR}/windows/INCLUDE”
已导入链接接口语言“C”
导入的位置发布“${PROJECT\u SOURCE\u DIR}/windows/bin/.dll”
导入的执行版本“${PROJECT\u SOURCE\u DIR}/windows/lib/.lib”
导入的位置调试“${PROJECT\u SOURCE\u DIR}/windows/bin/.dll”
导入的_IMPLIB_调试“${PROJECT_SOURCE_DIR}/windows/lib/.lib”)
endif()
目标链接库(MyConsumerTarget)
公共外部:lib1)
就个人而言,我更喜欢后者,因为它在主CMakeLists文件中不太详细。不同库的定义可以在通过其他方式包含的其他文件中完成。
通常,我的项目中有一个目录
3rdparty
,其中包含一个CMakeLists.txt
文件,该文件可以引入外部项目并定义导入的目标。在主CMake文件中,我可以轻松使用这些导入的目标。是否解决了您的问题?