在CMake中构建一个外部静态库,并包含结果

时间:2018-02-19 21:42:09

标签: c++ linux makefile build cmake

我的C ++项目依赖于库,我在子目录中拥有源代码。这个外部库有一个选项'build_static_lib',用于在CMakeLists.txt文件中将其构建为静态库。

在我的顶级目录CMakeLists.txt中,我的理解是应该很简单:

add_executable(myproject ${SOURCES})

set(build_static_lib ON)
add_subdirectory(${CMAKE_SOURCE_DIR}/subdirectory/external_project)
unset(build_static_lib)

....

target_link_libraries(myproject PRIVATE externalproject another_library)

当我运行此代码时,我的源代码已构建,然后在make期间,我收到错误消息,指出它无法找到-lexternalproject

奇怪的是,当我更改CMakeLists.txt(或删除CMakeCache)并再次运行时,突然它成功构建了libexternalproject并正确链接。

我错过了什么吗?我与CMake的旅程令人难以置信的痛苦,任何建议都将受到赞赏。似乎每个在线资源都有一个非常不同的策略,并且它们都没有完全实现这个可能简单的案例。谢谢!

编辑:

外部项目的CMakeLists.txt的内容为https://github.com/muflihun/easyloggingpp/blob/master/CMakeLists.txt

if (build_static_lib)
    if (lib_utc_datetime)
            add_definitions(-DELPP_UTC_DATETIME)
    endif()

    require_cpp11()
    add_library(easyloggingpp STATIC src/easylogging++.cc)

    install(TARGETS
        easyloggingpp
        ARCHIVE DESTINATION lib)
endif()

0 个答案:

没有答案