On 14. Dec, 2008, at 5:41, Kermit Mei wrote:

Werner Smekal wrote:
Hi,

Kermit Mei wrote:
Hello, all.
I used sigc++ library in my program, so I must compile my main.cc like this:

c++ -Wall main.cc -o main -I/usr/include/sigc++-2.0 -I/usr/lib/sigc ++-2.0/include -lsigc-2.0

Then, how can I write the CMakeLists.txt? I worte it like this:

cmake_minimum_required(VERSION 2.6)

PROJECT(MEM_BER)
SET(SRC_LIST main.cc)

MESSAGE(STATUS "This is BINARY dir " ${HELLO_BINARY_DIR})
MESSAGE(STATUS "This is SOURCE dir " ${HELLO_SOURCE_DIR})

INCLUDE_DIRECTORIES(/usr/include/sigc++-2.0)
INCLUDE_DIRECTORIES(/usr/lib/sigc++-2.0/include)

LINK_DIRECTORIES(/usr/lib/)

ADD_EXECUTABLE(main ${SRC_LIST})

#################################

But I can't link the libsigc.

http://www.cmake.org/cmake/help/ cmake2.6docs.html#command:target_link_libraries

target_link_libraries(main /usr/lib/libsigc-2.0.so)
(whatever sigc library is called and where it is, don't know)

HTH,
Werner

Yes, I see. Thanks.


But then, you probably want to use find_path and find_library to make things more flexible. Even better, create a FindLibSigCXX2.cmake module which will do things properly and can be reused. Here is a proposed implementation:

# - Try to find libsigc++-2.0
# Once done this will define
#
#  LIBSIGCXX2_FOUND - System has libsigc++2
#  LIBSIGCXX2_INCLUDE_DIRS - The libsigc++2 include directories
#  LIBSIGCXX2_LIBRARIES - The libraries needed to use libsigc++2

# Copyright (c) 2008, Michael Wild <them...@users.sf.net>
#
# Redistribution and use is allowed according to the terms of the BSD license.

if (NOT WIN32)
  # use pkg-config to get the directories and then use these values
  # in the FIND_PATH() and FIND_LIBRARY() calls
  find_package( PkgConfig REQUIRED )
  pkg_check_modules( _sigcxx2  REQUIRED sigc++-2.0 )
endif (NOT WIN32)

# find sigc++/sigc++.h
find_path( LIBSIGCXX2_sigcxx_h_DIR sigc++/sigc++.h
  PATHS ${_sigcxx2_INCLUDE_DIRS}
  PATH_SUFFIXES sigc++-2.0
  DOC "Include directory for sigc++.h"
  )

# find sigc++config.h
find_path( LIBSIGCXX2_sigcxxconfig_h_DIR sigc++config.h
  PATHS ${_sigcxx2_INCLUDE_DIRS}
  DOC "Include directory for sigc++config.h"
  )

# combine the two paths
set( LIBSIGCXX2_INCLUDE_DIRS ${LIBSIGCXX2_sigcxx_h_DIR} $ {LIBSIGCXX2_sigcxxconfig_h_DIR} )

# find the sigc-2.0 library
find_library( LIBSIGCXX2_LIBRARIES
  NAMES sigc-2.0 ${_sigcxx2_LIBRARIES}
  PATHS ${_sigcxx2_LIBRARY_DIRS}
  DOC "Libraries for libsigc++2"
  )

# let find_package_handle_standard_args handle all the boilerplate stuff
include( FindPackageHandleStandardArgs )
find_package_handle_standard_args(
LibSigCXX2 LIBSIGCXX2_LIBRARIES LIBSIGCXX2_sigcxx_h_DIR LIBSIGCXX2_sigcxxconfig_h_DIR
  )

# mark these cache entries as advanced
mark_as_advanced( LIBSIGCXX2_LIBRARIES LIBSIGCXX2_sigcxx_h_DIR
  LIBSIGCXX2_sigcxxconfig_h_DIR LIBSIGCXX2_INCLUDE_DIR
  )




Put this in some directory where CMake can find it or adjust CMAKE_MODULE_PATH in your CMakeLists.txt accordingly. Then, in your CMakeLists.txt do the following:

find_package( LibSigCXX2 REQUIRED )
if( NOT LIBSIGCXX2_FOUND )
message( SEND_ERROR "Failed to find the required package 'libsigc+ +' )
endif( NOT LIBSIGCXX2_FOUND )

include_directories( ${LIBSIGCXX2_INCLUDE_DIRS} )

...

target_link_libraries( main ${LIBSIGCXX2_LIBRARIES} )


HTH

Michael
_______________________________________________
CMake mailing list
CMake@cmake.org
http://www.cmake.org/mailman/listinfo/cmake

Reply via email to