我们有一个复杂的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.
如何在找到系统库时不发出警告?
我不想压制警告。
答案 0 :(得分:3)
命令add_dependencies
只应用于使用add_executable
,add_library
或add_custom_target
命令引入的CMake目标。
find_library
找到的库(正如您的FindSqlite.cmake
所做的那样)应该与target_link_libraries
相关联。在master/CMakeLists.txt
使用中:
target_link_libraries(master_lib ${SQLITE3_LIBRARIES})
CMP0046警告应该消失。