Steven Morad
Steven Morad

Reputation: 2617

Can't compile executable with CMake

I started with the following directory structure:

project
       exec
           executable.exe
       lib
           src
           include
       config
           <cmake-generated config file>

I created the library in the lib/src folder by using a CMakefile in the lib/src folder. The exe would compile.

Then, I moved my CMakeFile up to /lib, making sure to change the source file paths to /src/* Now, when I try to compile, all my libraries compile and link fine, but when I try to link the executable, I get /usr/bin/ld: cannot find -lconfig.

Does anyone have any idea why this happens or how to fix it?

Here is some of my code:

./CMakeLists.txt:
     include_directories(config)
     SET(EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR}/bin)
     SET(LIBRARY_OUTPUT_PATH ${PROJECT_BINARY_DIR}/lib)
     ADD_SUBDIRECTORY(libs) #library sources
     ADD_SUBDIRECTORY(exec) #executable sources
             CONFIGURE_FILE(${core_SOURCE_DIR}/config/config.h.in  
                  ${core_SOURCE_DIR}/config/config.h)

 ./libs/CMakeLists.txt:
     file(GLOB src ...)
     file(GLOB header ...)
     add_library(lib ${src} ${header})


 ./exec/CMakeLists:
      add_executable(executable executable.cpp)
      link_directories(${core_SOURCE_DIR}/lib) #not sure if this is required
      target_link_libraries(executable ${lots_of_libs})  

Every library in lots_of_libs can be found as a .a file in the lib directory

Upvotes: 1

Views: 624

Answers (1)

Antonio
Antonio

Reputation: 20266

One problem, probably not risolutive, is this:

link_directories(${core_SOURCE_DIR}/lib) #not sure if this is required

should be:

link_directories(${PROJECT_BINARY_DIR}/lib) 

or:

link_directories(${LIBRARY_OUTPUT_PATH}) 

Anyway, normally you wouldn't need to add to your link_directories the path to a library that is built within the project, even if you have specified a different LIBRARY_OUTPUT_PATH

Upvotes: 1

Related Questions