我有一个框架,这取决于多个第三方库。我想轻松分享我的框架。例如,用户只需要我的包含,并添加我的库来使用我的框架,而不是所有的依赖关系。框架管理库
我使用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