我知道如何根据构建配置是Debug
还是Release
来链接不同的库。我用:
foreach(dep ${DEPENDENCIES})
target_link_libraries (${PROJECT_NAME}
debug ${dep}_d
optimized ${dep}
)
endforeach(dep)
默认情况下,CMake在VS2010(Debug, Release, RelWithDebugInfo, MinSizeRelease
)中创建4个构建配置。但是如何为RelWithDebugInfo
配置定义taget链接库?
的 Bakcground: 的
我只使用Debug
,Release
和RelWithDebugInfo
。我的调试库有后缀_d
,其他没有后缀。因此Release
和RelWithDebugInfo
的输出文件是相同的。有时当我构建RelWithDebugInfo
然后Release
时,某些输出文件不会被覆盖,因此会加载坏文件并导致程序崩溃。我想通过向RelWithDebugInfo
配置添加一些其他后缀来解决此问题。
答案 0 :(得分:0)
我找到了解决方案。通过target_link_librearies
是不可能的,但可以通过设置链接器标志来完成:
set(DEBUG_DEP)
set(RWD_DEP)
set(RELEASE_DEP)
foreach(dep ${DEPENDENCIES})
set(RWD_DEP ${RWD_DEP} ${dep}_rwd)
set(DEBUG_DEP ${DEBUG_DEP} ${dep}_d)
set(RELEASE_DEP ${RELEASE_DEP} ${dep})
endforeach(dep)
set(CMAKE_SHARED_LINKER_FLAGS_DEBUG ${CMAKE_SHARED_LINKER_FLAGS_DEBUG} " /LIBPATH:" ${DEBUG_DEP})
set(CMAKE_SHARED_LINKER_FLAGS_RELEASE ${CMAKE_SHARED_LINKER_FLAGS_RELEASE} " /LIBPATH:" ${RELEASE_DEP})
set(CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO ${CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO}" /LIBPATH:" ${RWD_DEP})