c++ CMake错误(添加库):目标名称已保留或无效

7z5jn7bk  于 2023-02-20  发布在  其他
关注(0)|答案(1)|浏览(274)

我有以下CMakelists.txt文件:

cmake_minimum_required(VERSION 3.24)
project(client)

set(CMAKE_CXX_STANDARD 14)

include_directories(.)
link_directories("/opt/homebrew/lib")
include_directories("/opt/homebrew/include")

add_executable(client
        main.cpp
        User.cpp
        Utils.cpp
        )

add_library(/opt/homebrew/include/mosquitto.h )
target_link_libraries(client mosquitto)

我尝试将Mosquitto库添加到我的C++项目中。我一直收到以下错误:

CMake Error at CMakeLists.txt:16 (add_library):
  The target name "/opt/homebrew/include/mosquitto.h" is reserved or not
  valid for certain CMake features, such as generator expressions, and may
  result in undefined behavior.

这看起来很奇怪,因为Clion可以导入头文件,我可以开始用库编码,它只是不构建/运行?这也适用于使用完全相同路径的不同项目。

ilmyapht

ilmyapht1#

你做了add_library(/opt/homebrew/include/mosquitto.h )
您可能是指add_library(mosquitto /opt/homebrew/include/mosquitto.h )
您需要为目标命名。请参阅此处的文档和完整命令签名:https://cmake.org/cmake/help/latest/command/add_library.html
此外,如果目标仅为标头,则应使用带INTERFACE参数的target_include_directories。对于手动编写add_library调用的依赖项目标,可能需要使用add_libraryIMPORTED参数。
注意,如果一个库提供了查找模块脚本或查找配置脚本,那么您可以(并且应该)使用find_package,如果没有,您可以编写一个。
至于为什么会出现这样的错误消息,请参阅关于哪些CMake名称是有效的或保留的文档:https://cmake.org/cmake/help/latest/policy/CMP0037.html
目标名称可以包含大小写字母、数字、下划线字符(_)、点(.)、加号(+)和减号(-)。作为特殊情况,ALIASIMPORTED目标可以包含两个连续的冒号。
不允许使用一个或多个CMake生成器保留的目标名称。其中包括allcleanhelpinstall
注意斜杠(“/“)是如何不在允许的字符列表中的?

相关问题