2015-11-01 4 views
0

У меня проблема с зависимостями в моей конфигурации cmake. Когда я начинаю строить из корневого каталога проекта, он всегда дает ошибку. Когда я отключу add_subdirectory(application), где я использую LibCalcBin, он успешно создает library. Тогда я смогу построить application.cmake порядок выполнения команды add_subdirectory

Почему cmake не строит library, а затем application, как я указал в порядке команд add_subdirectory. Есть ли способ решить эту проблему? Благодарю.

Ошибка

Please set them or make sure they are set and tested correctly in the CMake files: 
LibCalcBin 
    linked by target "run" in directory ... 

./CMakeList.txt (Корневой каталог)

cmake_minimum_required(VERSION 3.3) 
project(DLLAbstract) 

# specify where to put executable 
SET(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/bin) 

# specify where to put binaries 
SET(LIBRARY_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/bin) 

# compile and build library 
add_subdirectory(library) 

# compile and build application 
add_subdirectory(application) 

./library

set(src LibCalc.cpp Calculator.cpp) 

add_definitions(-DDLL_EXPORT) 

add_library(LibCalc SHARED ${src}) 

./application

set(Src main.cpp) 

find_path(LibCalcHeader 
    NAMES 
     LibCalc.hpp 
    PATHS 
     ${PROJECT_SOURCE_DIR}/library 
) 

find_library(LibCalcBin 
    NAMES 
     LibCalc 
    PATHS 
     ${PROJECT_SOURCE_DIR}/bin/Debug 
     ${PROJECT_SOURCE_DIR}/bin/Release 
     ${PROJECT_SOURCE_DIR}/bin 
) 

include_directories(${LibCalcHeader}) 

add_executable(run ${Src}) 

target_link_libraries(run ${LibCalcBin}) 
+1

Почему вы ищете для вашей библиотеки? Просто делайте 'target_link_libraries (запустите LibCalc)' – arrowd

+0

@arrowd Я тестировал cmake для простых тематических исследований и хотел показать тематическое исследование функции find_library. Однако в этом случае просто использование 'target_link_libraries' автоматически создаст зависимость между приложением и библиотекой, чтобы решить мою проблему. Вы можете отправить ответ, я приму его. благодаря –

ответ

1

Команда find_library используется для поиска библиотек, которые не являются частью вашего проекта. Для библиотек, созданных add_library команды никакого специального лечения не требуется, и вы можете использовать имя цели в target_link_libraries вызова:

target_link_libraries(run LibCalc)