AW: [CMake] Where to find consistent documentation about CMake ?

Filipe Sousa filipe at ipb.pt
Wed Jul 5 05:42:57 EDT 2006


-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Sagnes, Frederic wrote:
> Hello Alex, thank you for your quick answer!
> 
> The message command works great, as well as the compiler flags settings. No idea about the static libraries? The product we are building should be standalone, even in a Unix environment.
> 
> Considering the release/debug profile on Unix, the problem is that I link to debug and release libraries on Visual C++ (I use Boost libraries), this is required because the wrong linked library in either profiles causes library conflict and make the application crash. To generate the linking I use the following code:
> 
> FIND_LIBRARY (
>   BOOST_PRG_LIBRARY
>     ${BOOST_LIB_PREFIX}boost_program_options${BOOST_LIB_SUFFIX}
>     ${LINK_DIRECTORIES}
> )

FIND_LIBRARY (
  BOOST_PRG_OPT_LIBRARY
    ${BOOST_LIB_PREFIX}boost_program_options${BOOST_LIB_SUFFIX}
    ${LINK_DIRECTORIES}
)


> FIND_LIBRARY (
>   BOOST_PRG_DBG_LIBRARY
>     ${BOOST_LIB_PREFIX}boost_program_options${BOOST_LIB_DBG_SUFFIX}
>     ${LINK_DIRECTORIES}
> )
> IF (BOOST_PRG_LIBRARY AND BOOST_PRG_DBG_LIBRARY)
>   SET (
>     BOOST_PRG_LIBRARY
>       optimized ${BOOST_PRG_LIBRARY}
>       debug ${BOOST_PRG_DBG_LIBRARY}
>   )
> ENDIF (BOOST_PRG_LIBRARY AND BOOST_PRG_DBG_LIBRARY)

In case you only have one of the libraries BOOST_PRG_LIBRARY is empty. A
 better way is too add a few checks

IF(BOOST_PRG_OPT_LIBRARY AND BOOST_PRG_DBG_LIBRARY)
  SET(BOOST_PRG_LIBRARY
    optimized ${BOOST_PRG_OPT_LIBRARY}
    debug ${BOOST_PRG_DBG_LIBRARY})
ELSE(BOOST_PRG_OPT_LIBRARY AND BOOST_PRG_DBG_LIBRARY)
  IF(BOOST_PRG_OPT_LIBRARY)
    SET(BOOST_PRG_LIBRARY ${BOOST_PRG_OPT_LIBRARY})
  ELSE(BOOST_PRG_OPT_LIBRARY)
    IF(BOOST_PRG_DBG_LIBRARY)
      SET(BOOST_PRG_LIBRARY ${BOOST_PRG_DBG_LIBRARY})
    ENDIF(BOOST_PRG_DBG_LIBRARY)
  ENDIF(BOOST_PRG_OPT_LIBRARY)
ENDIF(BOOST_PRG_OPT_LIBRARY AND BOOST_PRG_DBG_LIBRARY)


> ADD_EXECUTABLE (
>   TestClient
>     TestClient.cpp
> )
> 
> TARGET_LINK_LIBRARIES (
>   TestClient
>     ${BOOST_PRG_LIBRARY}
> )
> 
> Which in the end expands ${BOOST_PRG_LIBRARY} to :
> optimized;D:\ALM\Boost\vc-8_0\lib\ boost_program_options-vc80-mt.lib;debug; D:\ALM\Boost\vc-8_0\lib\ boost_program_options-vc80-mt-gd.lib
>  
> This works well under VS, and Unix boost builds also have debug libraries. I thought CMake would create some special targets to generate either release or debug binaries, instead of that it generates one target and does not link to any library, which makes the compilation fail with symbols not found errors. How does CMake handle these profiles with the Makefile generator?
> 
> I'll have a look at these project's CMake files, but still, a central and consistent help for CMake would be a real plus. Your project is great; it only lacks a manual to take advantage of all of its features.

You have to set CMAKE_BUILD_TYPE to RELEASE or DEBUG so that cmake can
make a choice between the debug and the optimized library.

> Thank you,
> 
> Frédéric Sagnes
- --
Filipe Sousa
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.4 (GNU/Linux)

iD8DBQFEq4mhbQdNYqwwwCwRArvZAKCbk5mIJerdzyV5eIvUkf1QGo9iVQCbBQVk
oBOfSuGLVA1r2Y7R43vdZ9o=
=HhnR
-----END PGP SIGNATURE-----


More information about the CMake mailing list