【问题标题】:Cmake error: Cannot specify link libraries for target [duplicate]Cmake错误:无法为目标指定链接库[重复]
【发布时间】:2018-06-13 21:27:33
【问题描述】:

我正在尝试构建一个简单的 CMake 项目,但我在理解 CMake 时遇到问题,或者至少是我遇到的错误。

我制作的项目分为几个目录。 主要有这个cmake:

cmake_minimum_required(VERSION 3.7.2)
project(Raytracer)
set(CMAKE_CXX_STANDARD 14)

add_subdirectory(src)
set(COMMON_INCLUDES ${PROJECT_SOURCE_DIR}/inc)

我的项目从那里拆分为 2 个文件夹 src 和 inc。 在 src 中,我有以下 cmake 的想法来全局所有子文件夹:

FILE(GLOB sub-dirs RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} *)
FOREACH(dir ${sub-dirs})
    IF(IS_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/${dir})
        ADD_SUBDIRECTORY(${dir})
    ENDIF()
ENDFOREACH()

add_executable(raytracer main.cpp)

我还添加了这个主 src 文件夹中的可执行文件。 从那里开始,我希望能够使用自己的 Cmake 文件添加子文件夹并将这些文件链接到我的可执行文件。 我有以下cmake:

set(OBJECTS
    asdf.cpp
    )

add_library(obj_files ${OBJECTS} ${COMMON_FILES})
target_link_libraries(raytracer obj_files)

但是当我尝试构建时出现以下错误:

Cannot specify link libraries for target "raytracer" which is not built by this project.

【问题讨论】:

  • 您应该创建一个目标(在您的情况下为raytracer在使用它之前target_link_libraries 和其他需要目标的命令中。

标签: c++ cmake


【解决方案1】:

基本上在Cmake 文件或toolchain.cmake 中,命令的顺序很重要! target_link_libraries()target_include_directories() 必须始终为 after add_executable()

【讨论】:

    猜你喜欢
    • 2015-08-16
    • 1970-01-01
    • 1970-01-01
    • 2014-11-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多