我的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()