使用CMake的静态链接到库中的项目之外(Using CMake to statically lin

2019-08-17 21:16发布

我想用CMake的到我的项目链接到我的共享库。 该库只的项目屈指可数之间共享,并且是相当小的,所以我真的想打造它,它是与之前。 每一次建立它似乎是一个更好的主意,不必维持了最新版本的预编译,因为我十到与项目一起改变它。 它是独立的,因为它包含的东西,我几乎可以肯定将需要在未来的项目中。

如何配置CMake的办呢?

我为相关项目当前的CMakeLists.txt看起来是这样的:

find_package( Boost REQUIRED COMPONENTS unit_test_framework)

include_directories(${BaumWelch_SOURCE_DIR}/../../grzesLib/src
                    ${BaumWelch_SOURCE_DIR}/src 
                    ${Boost_INCLUDE_DIRS})

if(CMAKE_COMPILER_IS_GNUCXX)
    add_definitions(-g -std=c++11 -Wall -Werror -Wextra -pedantic -Wuninitialized)
endif()


# Create the unit tests executable
add_executable(
 baumwelchtests stateindextest.cpp baumiterationtest.cpp baumwelchtest.cpp sampleparameters.cpp sdetest.cpp
 # Key includes for setting up Boost.Test
 testrunner.cpp
 # Just for handy reference
 exampletests.cpp
)

# Link the libraries
target_link_libraries( baumwelchtests ${Boost_LIBRARIES} baumwelchlib grzeslib)

但显然编译失败:

/usr/bin/ld: cannot find -lgrzeslib

Answer 1:

你提到你想构建库,而不是使用预编译的版本。 如果库有CMakeList,你应该使用它添加add_subdirectory(path/to/the/library/source/directory) 。 然后,它会成为你的项目的一个子项目,你通常可以在你的CMakeList使用其目标的名字。

注意,当命令被称为add_ 子目录 ,它可以在磁盘上的任意目录; 它不必是主项目的源代码目录的子目录。 如果它不是一个子目录,你必须明确地为它指定一个二进制目录中。 例:

add_subdirectory(/path/to/the/library/source/directory subproject/grzeslib)

第二个参数,如果给定为相对路径,相对于解释CMAKE_CURRENT_BINARY_DIR



文章来源: Using CMake to statically link to a library outside of the project