[CMake] target_link_libraries buggy with visual studio?

Petr Kmoch petr.kmoch at gmail.com
Tue Jul 3 04:21:05 EDT 2012


Hi,

are you setting the global property DEBUG_CONFIGURATIONS anywhere? If
not, cmake does not know which configurations are supposed to be
debug, so it treats all of them as optimized. Try adding the following
after the two set(CMAKE_CONFIGURATION_TYPES ...) commands:

set_property(GLOBAL PROPERTY DEBUG_CONFIGURATIONS DebugOpenGL DebugDX11)

Petr

On Tue, Jul 3, 2012 at 12:26 AM, terje loe <terjeloe at hotmail.com> wrote:
> Hi,
>
> I'm trying to use target_link_libraries to add a release and debug version
> of a library to my debug and release config of my Visual Studyi project.
>
>         message(${JSONCPP_LIB_DEBUG})
>         message(${JSONCPP_LIB_RELEASE})
>         target_link_libraries(
>                 TEEngineTest
>                 TECore
>                 TEngine
>                 TEGraphics
>                 TEPhysics
>                 TETransform
>                 ${cg_libs}
>                 ${libpng_lib}
>                 ${ASSIMP_LIB}
>                 debug ${JSONCPP_LIB_DEBUG}
>                 optimized ${JSONCPP_LIB_RELEASE})
>
>
> When I'm generating it prints this:
>
> D:/coding/tengine/Externals/jsoncpp/build/vs71/debug/lib_json/json_vc71_libmtd.lib
> D:/coding/tengine/Externals/jsoncpp/build/vs71/release/lib_json/json_vc71_libmt.lib
> Configuring done
> Generating done
>
>
> But when I look at the properties of the project it adds the release build
> of the lib to both debug and the release build?
>
>
> Im not sure if this is relevant, but this is how I set up  my debug and
> release config for Visual Studio
>
> if(MSVC)
> set_property(GLOBAL PROPERTY USE_FOLDERS ON)
> set_property(GLOBAL PROPERTY PREDEFINED_TARGETS_FOLDER "9. CMake")
> set(CMAKE_CONFIGURATION_TYPES
> "DebugOpenGL;ReleaseOpenGL;DebugDX11;ReleaseDX11")
> set(CMAKE_CONFIGURATION_TYPES "${CMAKE_CONFIGURATION_TYPES}" CACHE STRING
> "Reset the configurations to what we need"
> FORCE)
> #DebugOpenGL flags
> set(CMAKE_CXX_FLAGS_DEBUGOPENGL "/D_DEBUG /MDd /Zi /Ob0 /Od /RTC1" CACHE
> STRING "Flags used by the C++ compiler during maintainer builds." FORCE)
> set(CMAKE_C_FLAGS_DEBUGOPENGL "/D_DEBUG /MDd /Zi  /Ob0 /Od /RTC1" CACHE
> STRING "Flags used by the C compiler during maintainer builds." FORCE)
> set(CMAKE_EXE_LINKER_FLAGS_DEBUGOPENGL "/debug /INCREMENTAL" CACHE STRING
> "Flags used for linking binaries during maintainer builds." FORCE )
> set(CMAKE_SHARED_LINKER_FLAGS_DEBUGOPENGL "/debug /INCREMENTAL" CACHE STRING
> "Flags used by the shared libraries linker during maintainer builds." FORCE
> )
>
> #ReleaseOpenGL flags
> set(CMAKE_CXX_FLAGS_RELEASEOPENGL "/MD /O2 /Ob2 /D NDEBUG" CACHE STRING
> "Flags used by the C++ compiler during maintainer builds." FORCE)
> set(CMAKE_C_FLAGS_RELEASEOPENGL "/MD /O2 /Ob2 /D NDEBUG" CACHE STRING "Flags
> used by the C compiler during maintainer builds." FORCE)
> set(CMAKE_EXE_LINKER_FLAGS_RELEASEOPENGL "/INCREMENTAL:NO" CACHE STRING
> "Flags used for linking binaries during maintainer builds." FORCE )
> set(CMAKE_SHARED_LINKER_FLAGS_RELEASEOPENGL "/INCREMENTAL:NO" CACHE STRING
> "Flags used by the shared libraries linker during maintainer builds." FORCE
> )
> #DebugDX11 flags
> set(CMAKE_CXX_FLAGS_DEBUGDX11 "/D_DEBUG /MDd /Zi /Ob0 /Od /RTC1" CACHE
> STRING "Flags used by the C++ compiler during maintainer builds." FORCE)
> set(CMAKE_C_FLAGS_DEBUGDX11 "/D_DEBUG /MDd /Zi  /Ob0 /Od /RTC1" CACHE STRING
> "Flags used by the C compiler during maintainer builds." FORCE)
> set(CMAKE_EXE_LINKER_FLAGS_DEBUGDX11 "/debug /INCREMENTAL" CACHE STRING
> "Flags used for linking binaries during maintainer builds." FORCE )
> set(CMAKE_SHARED_LINKER_FLAGS_DEBUGDX11 "/debug /INCREMENTAL" CACHE STRING
> "Flags used by the shared libraries linker during maintainer builds." FORCE
> )
> #ReleaseDX11 flags
> set(CMAKE_CXX_FLAGS_RELEASEDX11 "/MD /O2 /Ob2 /D NDEBUG" CACHE STRING "Flags
> used by the C++ compiler during maintainer builds." FORCE)
> set(CMAKE_C_FLAGS_RELEASEDX11 "/MD /O2 /Ob2 /D NDEBUG" CACHE STRING "Flags
> used by the C compiler during maintainer builds." FORCE)
> set(CMAKE_EXE_LINKER_FLAGS_RELEASEDX11 "/INCREMENTAL:NO" CACHE STRING "Flags
> used for linking binaries during maintainer builds." FORCE )
> set(CMAKE_SHARED_LINKER_FLAGS_RELEASEDX11 "/INCREMENTAL:NO" CACHE STRING
> "Flags used by the shared libraries linker during maintainer builds." FORCE
> )
> set_directory_properties(PROPERTIES
> COMPILE_DEFINITIONS_DEBUGOPENGL TE_OPENGL
> COMPILE_DEFINITIONS_RELEASEOPENGL TE_OPENGL
> COMPILE_DEFINITIONS_DEBUGDX11 TE_DX11
> COMPILE_DEFINITIONS_RELEASEDX11 TE_DX11
> )
> endif()
>
> --
>
> Powered by www.kitware.com
>
> Visit other Kitware open-source projects at
> http://www.kitware.com/opensource/opensource.html
>
> Please keep messages on-topic and check the CMake FAQ at:
> http://www.cmake.org/Wiki/CMake_FAQ
>
> Follow this link to subscribe/unsubscribe:
> http://www.cmake.org/mailman/listinfo/cmake


More information about the CMake mailing list