我有以下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可以导入头文件,我可以开始用库编码,它只是不构建/运行?这也适用于使用完全相同路径的不同项目。
1条答案
按热度按时间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_library
的IMPORTED
参数。注意,如果一个库提供了查找模块脚本或查找配置脚本,那么您可以(并且应该)使用
find_package
,如果没有,您可以编写一个。至于为什么会出现这样的错误消息,请参阅关于哪些CMake名称是有效的或保留的文档:https://cmake.org/cmake/help/latest/policy/CMP0037.html:
目标名称可以包含大小写字母、数字、下划线字符(
_
)、点(.
)、加号(+
)和减号(-
)。作为特殊情况,ALIAS
和IMPORTED
目标可以包含两个连续的冒号。不允许使用一个或多个CMake生成器保留的目标名称。其中包括
all
、clean
、help
和install
。注意斜杠(“
/
“)是如何不在允许的字符列表中的?