2016-08-09 3 views
1

을 실행하기 나는 다음과 같은 구성을 가지고cmake 링크 오류가 내 프로젝트에서

  • 낮은 수준의 공유 라이브러리
  • 공유 낮은 수준 공유 라이브러리의 래퍼 라이브러리
  • 실행

때문에 파일 트리입니다 :

CMakeLists.txt 
SharedLibraryBase 
    CMakeLists.txt 
    inc 
     myLibBase.h -> defines MyLibBaseFunction() 
    src 
     myLibBase.cpp -> implements MyLibBaseFunction() 
MySharedLibrary 
    CMakeLists.txt 
    inc 
     myLib.h  -> defines MyLibFunction() 
    src 
     myLib.cpp  -> implements MyLibFunction() 
Executables 
    CMakeLists.txt 
    inc 
     main.h 
    src 
     main.cpp -> calls MyLibFunction() 

걸 수행 할 때, 나는 다음과 같은 링크 오류 얻을 :

ld.exe: cannot find -lMySharedLibrary

주요 CMakeLists.txt입니다 :

cmake_minimum_required(VERSION 3.5) 

project(TestSharedLibraryProject) 
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11") 
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "my_outputs") 
message("Binary tree path : ${PROJECT_BINARY_DIR}") 
add_subdirectory(SharedLibraryBase) 
add_subdirectory(MySharedLibrary) 
add_subdirectory(Executables) 

하위 공유 라이브러리 CMakeL ists.txt은 다음과 같습니다

########################### 
# SharedLibraiesBase # 
########################### 
project(SharedLibraryBase) 

# include directories 
include_directories(${CMAKE_CURRENT_SOURCE_DIR} ${Boost_INCLUDE_DIRS} ${CMAKE_CURRENT_SOURCE_DIR}/inc) 

# find source files 
set(${PROJECT_NAME}_headers inc/myLibBase.h) 
set(${PROJECT_NAME}_sources src/myLib.cpp) 

# create shared library 
add_library(${PROJECT_NAME} SHARED ${${PROJECT_NAME}_headers} ${${PROJECT_NAME}_sources}) 

# add files to export to 'include' 
set_property(TARGET ${PROJECT_NAME} PROPERTY PUBLIC_HEADER inc/myLibBase.h) 

install (TARGETS ${PROJECT_NAME} 
     RUNTIME DESTINATION bin 
     LIBRARY DESTINATION lib 
     ARCHIVE DESTINATION lib/static 
     PUBLIC_HEADER DESTINATION include) 

래퍼 공유 라이브러리 CMakeLists.txt은 다음과 같습니다

####################### 
# SharedLibraies # 
####################### 
project(MySharedLibrary) 

# include directories 
include_directories(${CMAKE_CURRENT_SOURCE_DIR} ${Boost_INCLUDE_DIRS} inc ../SharedLibraryBase/inc) 

# find source files 
set(${PROJECT_NAME}_headers inc/myLib.h) 
set(${PROJECT_NAME}_sources src/myLib.cpp) 

# create shared library 
add_library(${PROJECT_NAME} SHARED ${${PROJECT_NAME}_headers} ${${PROJECT_NAME}_sources}) 

#dependency shared library (from this project) 
target_link_libraries(${PROJECT_NAME} SharedLibraryBase) 

# add files to export to 'include' 
set_property(TARGET ${PROJECT_NAME} PROPERTY PUBLIC_HEADER inc/myLib.h) 

install (TARGETS ${PROJECT_NAME} 
     RUNTIME DESTINATION bin 
     LIBRARY DESTINATION lib 
     ARCHIVE DESTINATION lib/static 
     PUBLIC_HEADER DESTINATION include) 

실행 CMakeLists.txt은 다음과 같습니다

#################### 
# Executables # 
#################### 
project(Executables) 

# include directories 
include_directories(${CMAKE_CURRENT_SOURCE_DIR} ${Boost_INCLUDE_DIRS}/inc ${CMAKE_CURRENT_SOURCE_DIR}/../MySharedLibrary/inc) 

set(${PROJECT_NAME}_headers inc/main.h) 
set(${PROJECT_NAME}_sources src/main.cpp) 

#create executable 
add_executable(${PROJECT_NAME} ${${PROJECT_NAME}_headers} ${${PROJECT_NAME}_sources}) 

#dependency shared library (from this project) 
target_link_libraries(${PROJECT_NAME} MyShraedLibrary) 

install (TARGETS ${PROJECT_NAME} 
     RUNTIME DESTINATION bin 
     LIBRARY DESTINATION lib 
     ARCHIVE DESTINATION lib/static) 

답변

3

당신은 보통이 MySharedLibrary 대신 MyShraedLibrary 오류를 입력하십시오.

관련 문제