2015-08-24 3 views
1

Я пытаюсь создать файл cmake для своего проекта, чтобы узнать, как сделать файл cmake.Файл Cmake, связывающий динамическую библиотеку с исполняемым файлом

My directory Structure. Я получаю сообщение об ошибке:

square_and_add 
|- src 
| |- <Some source files> 
|- libsrc 
| |- include 
| |- <library header files> 
| |- src 
| |- <library source files> 
|- build 
|- libs 
|- <installed libraries> 

cmake_minimum_required(VERSION 2.6) 
project(SQUARE_AND_ADD) 
set(CMAKE_CXX_FLAGS "-g -Wall") 

include_directories(./libsrc/include) 
include_directories(./libsrc/src) 
include_directories(./build) 

add_executable(no_lib_exec ./src/main.cc) 
target_link_libraries(no_lib_exec ./libsrc/src/square.cc) 
set_target_properties(no_lib_exec PROPERTIES PREFIX "" OUTPUT_NAME sqnadd_no_lib) 

add_library(build_static_lib STATIC ./libsrc/src/square.cc) 
set_target_properties(build_static_lib PROPERTIES PREFIX "" OUTPUT_NAME static_library) 

add_executable(static_lib_exec ./src/main.cc) 
target_link_libraries(static_lib_exec ./build/static_library.a) 
set_target_properties(static_lib_exec PROPERTIES PREFIX "" OUTPUT_NAME sqnadd_stat_lib) 

add_library(build_dynamic_lib SHARED ./libsrc/src/square.cc) 
set_target_properties(build_dynamic_lib PROPERTIES PREFIX "" OUTPUT_NAME dynamic_library) 

add_executable(dynamic_lib_exec ./src/main.cc) 
target_link_libraries(dynamic_lib_exec ./build/dynamic_library.so) 
set_target_properties(dynamic_lib_exec PROPERTIES PREFIX "" OUTPUT_NAME sqnadd_dyn_lib) 

install(TARGETS dynamic_lib_exec static_lib_exec 
     RUNTIME DESTINATION ./libs CONFIGURATIONS debug) 

Я получаю эту ошибку

/usr/bin/ld: cannot find -l./build/dynamic_library collect2: error: ld returned 1 exit status CMakeFiles/dynamic_lib_exec.dir/build.make:85: recipe for target 'sqnadd_dyn_lib' failed

+0

почему не вы просто используете 'target_link_libraries (dynamic_lib_exec build_dynamic_lib)'? –

ответ

0

Вот мой подход к делать такие вещи:

cmake_minimum_required(VERSION 2.6) 
project(SQUARE_AND_ADD) 
set(CMAKE_CXX_FLAGS "-g -Wall") 

include_directories(${CMAKE_CURRENT_SOURCE_DIR}/libsrc/include) 

set(EXEC_NAME_BASE "sqnadd") 
set(EXEC_NOLIB_NAME "${EXEC_NAME_BASE}_no_lib") 
set(EXEC_STATICLIB_NAME "${EXEC_NAME_BASE}_stat_lib") 
set(EXEC_SHAREDLIB_NAME "${EXEC_NAME_BASE}_dyn_lib") 

set(STATICLIB_NAME "square_static") 
set(SHAREDLIB_NAME "square_shared") 


# if no lib, then just compile the square.cc into the executable 
add_executable(${EXEC_NOLIB_NAME} src/main.cc libsrc/src/square.cc) 


add_library(${STATICLIB_NAME} STATIC libsrc/src/square.cc) 

add_executable(${EXEC_STATICLIB_NAME} src/main.cc) 
target_link_libraries(${EXEC_STATICLIB_NAME} ${STATICLIB_NAME}) 


add_library(${SHAREDLIB_NAME} SHARED libsrc/src/square.cc) 

add_executable(${EXEC_SHAREDLIB_NAME} src/main.cc) 
target_link_libraries(${EXEC_SHAREDLIB_NAME} ${SHAREDLIB_NAME}) 


# installing libraries: 
install(TARGETS ${SHAREDLIB_NAME} ${STATICLIB_NAME} 
     RUNTIME DESTINATION lib CONFIGURATIONS debug) 

# installing executables 
install(TARGETS ${EXEC_NOLIB_NAME} 
       ${EXEC_STATICLIB_NAME} 
       ${EXEC_SHAREDLIB_NAME} 
     RUNTIME DESTINATION bin 
     CONFIGURATIONS debug) 
Смежные вопросы