CMake报错:无法为非本项目构建的target 'conan_test'指定链接库
解决CMake链接mongocxx时的目标未定义错误
错误原因:
target_link_libraries语句写在了add_executable之前,此时${PROJECT_NAME}(即conan_test)这个可执行目标还没被CMake创建,所以触发"目标未被本项目构建"的错误。CMake规则要求必须先创建目标,再为其添加链接依赖。修正后的CMakeLists.txt:
cmake_minimum_required(VERSION 3.27) project(conan_test) set(CMAKE_CXX_STANDARD 17) # 先创建可执行文件目标 add_executable(${PROJECT_NAME} main.cpp) # 查找mongocxx库,REQUIRED确保找不到库时直接报错 find_package(mongocxx REQUIRED) # 为已创建的目标链接mongocxx静态库,PRIVATE表示依赖仅用于本目标内部 target_link_libraries(${PROJECT_NAME} PRIVATE mongo::mongocxx_static)
- main.cpp示例代码:
#include <iostream> #include <mongocxx/client.hpp> #include <mongocxx/instance.hpp> int main() { // 初始化mongocxx库实例 mongocxx::instance instance{}; // 连接本地MongoDB服务 mongocxx::client client{mongocxx::uri{}}; auto test_db = client["test_database"]; std::cout << "成功连接MongoDB" << std::endl; return 0; }
- 额外检查项:
- 确认CLion的Conan插件已正确配置macOS下的编译profile,确保mongocxx库的CMake配置文件能被find_package找到。
- 如果之前Conan安装mongocxx时指定了特定版本,可在find_package中加入版本约束(如
find_package(mongocxx 3.7 REQUIRED))。
内容的提问来源于stack exchange,提问作者David Lev Gabbay
相关产品推荐
相关产品推荐

