CMake策略CMP0046,find_package()和add_subdirectory()

时间:2015-04-05 04:17:44

标签: cmake

我们有一个复杂的CMake项目,因为升级到CMake 3后会遇到CMP0046。以下是根CMakeLists.txt中的基本设置:

find_package(Sqlite)  # Finds the system library at /usr/lib64/libsqlite3.so
...
add_subdirectory(master)

然后在master/子目录中CMakeLists.txt

set(MASTER_DEPS sqlite)
...
add_library(master_lib OBJECT EXCLUDE_FROM_ALL ${MASTER_SOURCES})
add_dependencies(master_lib ${MASTER_DEPS})

sqlite依赖关系抛出CMP0046的策略警告,但在CMakeLists.txt完成之前,它在主add_subdirectory中找到。

我试图多次重写我们的FindSqlite.cmake模块。此外,如果我自己添加sqlite来源而不是像find_package那样使用add_library(sqlite ${CMAKE_CURRENT_SOURCE_DIR}/sqlite3.c ${CMAKE_CURRENT_SOURCE_DIR}/sqlite3.h ) 来自警告,那么警告就会消失:

{{1}}

供参考,here is our current FindSqlite.cmake module.

如何在找到系统库时不发出警告?

我不想压制警告。

1 个答案:

答案 0 :(得分:3)

命令add_dependencies只应用于使用add_executableadd_libraryadd_custom_target命令引入的CMake目标。

find_library找到的库(正如您的FindSqlite.cmake所做的那样)应该与target_link_libraries相关联。在master/CMakeLists.txt使用中:

target_link_libraries(master_lib ${SQLITE3_LIBRARIES})

CMP0046警告应该消失。