On Fri, Sep 21, 2012 at 2:26 PM, Reza Housseini <[email protected]> wrote:
> Hello
> I want to add my own library libsieve.so with the header file Sieve.h
> to the custom target. I have the following setup:
>
> find_program(MKOCTFILE_EXECUTABLE mkoctfile)
> if(NOT MKOCTFILE_EXECUTABLE)
>   message(SEND_ERROR "Failed to find mkoctfile, is it in your $PATH?")
> endif()
>
> set(OCT_FILE "multidecksieve.oct")
> set(OCT_SRC "${CMAKE_CURRENT_SOURCE_DIR}/multidecksieve.cpp")
> set(CPPLIB_DIR "${CMAKE_SOURCE_DIR}/../core/build")
> set(CPPLIB_INCLUDE_DIR "${CMAKE_SOURCE_DIR}/../core")
>
> find_library(CPPLIB_SIEVE_LIBRARY NAMES sieve PATHS ${CPPLIB_DIR})
> find_path(CPPLIB_INCLUDE_DIR ${CMAKE_SOURCE_DIR}/../core)
>
> if ("${CPPLIB_SIEVE_LIBRARY}" STREQUAL "CPPLIB_SIEVE_LIBRARY-NOTFOUND")
>   message(FATAL_ERROR "One of the libraries wasn't found!")
> endif ()
>
> include_directories(CPPLIB_INCLUDE_DIR)
>
> add_custom_command(
>   OUTPUT ${OCT_FILE}
>   COMMAND ${MKOCTFILE_EXECUTABLE} "${OCT_SRC}"
>   DEPENDS ${CPPLIB_INCLUDE_DIR}/Sieve.h ${CPPLIB_SIEVE_LIBRARY}
>   COMMENT "Generating ${OCT_FILE}"
>   VERBATIM)
>
> add_custom_target(multidecksieve ALL
>   DEPENDS ${OCT_FILE})
>
> But it gives me the error that it can't find the Sieve.h file:
> fatal error: Sieve.h: No such file or directory
>
> What is the correct way to do it?
>
> Thanks and best wishes
> Reza

I was able to make it to work:

find_program(MKOCTFILE_EXECUTABLE mkoctfile)
if(NOT MKOCTFILE_EXECUTABLE)
  message(SEND_ERROR "Failed to find mkoctfile, is it in your $PATH?")
endif()

## Compile the octfile
set(OCT_CXXFLAGS "-O2 -Wall -Wextra -std=c++0x")
set(ENV{CXXFLAGS} ${OCT_CXXFLAGS})
set(OCT_FILE "${PROJECT_BINARY_DIR}/multidecksieve.oct")
set(OCT_SRC ${CMAKE_CURRENT_SOURCE_DIR}/multidecksieve.cpp)
set(CPPLIB_DIR ${CMAKE_CURRENT_SOURCE_DIR}/../core/build)
set(CPPLIB_INCLUDE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/../core")

find_library(CPPLIB_SIEVE_LIBRARY NAMES sieve PATHS ${CPPLIB_DIR})

if ("${CPPLIB_SIEVE_LIBRARY}" STREQUAL "CPPLIB_SIEVE_LIBRARY-NOTFOUND")
  message(FATAL_ERROR "One of the libraries wasn't found!")
endif ()

set(CPPLIB_LIBRARIES "${CMAKE_CURRENT_SOURCE_DIR}/../core/build")
set(CPPLIB_HINT_INCLUDE_DIR ${CPPLIB_DIR})

set(DEPENDENCIES ${OCT_SRC} ${CPPLIB_SIEVE_LIBRARY})
add_custom_command(
  OUTPUT ${OCT_FILE}
  DEPENDS ${DEPENDENCIES}
  COMMAND ${MKOCTFILE_EXECUTABLE}
  ARGS ${OCT_SRC}
  ARGS -I${CPPLIB_INCLUDE_DIR} -L${CPPLIB_DIR} -lsieve
  COMMENT "Generating ${OCT_FILE}"
  VERBATIM)

add_custom_target(multidecksieve ALL
  DEPENDS ${OCT_FILE})

It compiles fine, but when I run the created file (in GNU Octave) I
get an error message saying the library libsieve.so is not found
although it exists on the provided path. What is the problem here?

Thanks for any answer
Reza
--

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

Reply via email to