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