首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >使用CMake静态链接到项目外部的库

使用CMake静态链接到项目外部的库
EN

Stack Overflow用户
提问于 2013-03-22 19:46:23
回答 1查看 12.4K关注 0票数 17

我想使用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
EN

回答 1

Stack Overflow用户

发布于 2013-03-22 20:20:01

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

请注意,虽然该命令名为add_subdirectory,但它可以是磁盘上的任意目录;它不必是主项目的源目录的子目录。如果它不是一个子目录,您还必须显式地为它指定一个二进制目录。示例:

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

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

票数 29
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15569548

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档