我有一個框架,這取決於多個第三方庫。我想輕鬆分享我的框架。例如,用戶只需要我的包含,並添加我的庫來使用我的框架,而不是所有的依賴關係。框架管理庫
我使用CMake來創建我的庫,但我仍然試圖瞭解它是如何工作的。
項目
test
├── CMakeLists.txt
├── libA
│ ├── CMakeLists.txt
│ ├── libA.cpp
│ ├── libA.hpp
├── libB
│ ├── CMakeLists.txt
│ ├── libB.cpp
│ ├── libB.hpp
└── test
├── CMakeLists.txt
└── main.cpp
的libB依賴於力霸的層次,我想只添加libB使項目工程。
位於測試/主要的CMakeLists.txt的含量:
cmake_minimum_required (VERSION 2.8.11)
project (C CXX)
include(CheckCXXCompilerFlag)
add_subdirectory("libA")
add_subdirectory("libB")
add_subdirectory("test")
位於測試的主要的CMakeLists.txt的含量/ LIBA:
cmake_minimum_required (VERSION 2.8.11)
project (A CXX)
include(CheckCXXCompilerFlag)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -std=c++14")
file(GLOB SOURCES "*.cpp")
add_library(A STATIC ${SOURCES})
的主要CMakeLists.txt的內容位於test/libB:
cmake_minimum_required (VERSION 2.8.11)
project (B CXX)
include(CheckCXXCompilerFlag)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -std=c++14")
set(CMAKE_EXE_LINKER_FLAGS ${CMAKE_EXE_LINKER_FLAGS} "-static")
include_directories("../libA")
link_directories("../libA")
file(GLOB SOURCES "*.cpp")
add_library(B STATIC ${SOURCES})
target_link_libraries(B A)
位於測試/測試主要的CMakeLists.txt的內容:
cmake_minimum_required (VERSION 2.8.11)
project (C CXX)
include(CheckCXXCompilerFlag)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -std=c++14")
include_directories(../libA)
include_directories(../libB)
link_directories(../build/libB)
link_directories(../build/libA)
add_executable(C main.cpp)
target_link_libraries(C B)
如果我經營的主要CMake的一切工作正常,獨立很好地產生。 但是,如果我想通過進入測試/測試並運行「cmake。& & make」來創建唯一的exe,我有一個未定義的addL(int,int)引用。爲了使它工作,我必須在CMakeLists的末尾添加target_link_libraries(C A)。這是正常的嗎?是否有可能只添加沒有依賴關係的主庫?
如果我理解正確,對於獨立的,與我的靜態lib我需要鏈接所有的依賴關係。而獨立鏈接到共享庫我只需要主lib。 – F4r3n
是的,您需要明確鏈接到* static *庫的依賴關係。 * Shared *庫不需要這個:它的依賴被自動加載。 – Tsyvarev