Search code examples
c++cmakemakefilelibevent

CMake 'no rule to make target' with external library


I am trying link one of my programs to libevent. I am using CMake as build system. My project structure is as follows:

my_project
├── CMakeLists.txt
├── README.md
├── build
│   └── Build stuff
└── software
    ├── README.md
    ├── CMakeLists.txt
    ├── include
    ├── libraries
    │   ├── libevent
    │   │   └── CMakeLists.txt
    │   └── anotherlibrary
    │       └── CMakeLists.txt
    ├── prog1
    │   ├── CMakeLists.txt
    ├── prog2
    │   ├── CMakeLists.txt
    └── prog3
        └── CMakeLists.txt

CMakeList.txt of prog1 (the one that's needs to be linked to libevent)

cmake_minimum_required(VERSION 2.6)
project (prog1)

file(GLOB prog1
    "*.h"
    "*.cpp"
)

include_directories("${PROJECT_INCLUDE_DIR}/libevent/include")

add_executable(${PROJECT_NAME} ${prog1})
target_link_libraries(${PROJECT_NAME} event_core)

But when I build the project make can't find the library build by libevent. it searched for: libraries/libevent/lib/libevent_core.a this is the wrong path since libevent builds it libs inside: my_project/build/software/libraries/libevent/lib/libevent_core.a

How do I tell CMake to search there for the library? I already added the following lines to my Cmake file but this wasn't working

    link_directories(/my_project/build/software/libraries/libevent/lib/)

    SET(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_SOURCE_DIR}/build/lib)
    SET(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_SOURCE_DIR}/build/bin)

Anyone a suggestion?


Solution

  • I fixed the problem myself by removing the content from the build directory and re running cmake .. inside the build directory.

    I think CMake was somehow not aware of the changes I made and by rebuilding the project the problem was fixed.