【问题标题】:Can't determine link language for project无法确定项目的链接语言
【发布时间】:2014-07-03 18:53:52
【问题描述】:

我有这个 CMakeLists.txt 文件:

CMAKE_MINIMUM_REQUIRED(VERSION 2.8)
CMAKE_POLICY(SET CMP0002 OLD)

PROJECT(gl_nbody C CXX)

ADD_EXECUTABLE(gl_nbody src/main.cpp)
set_target_properties(gl_nbody PROPERTIES LINKER_LANGUAGE CXX)

INCLUDE(FindPkgConfig)
PKG_SEARCH_MODULE(SDL2 REQUIRED sdl2)
INCLUDE_DIRECTORIES(${SDL2_INCLUDE_DIRS})
TARGET_LINK_LIBRARIES(gl_nbody ${SDL2_LIBRARIES})

find_package(OpenGL REQUIRED)
include_directories(${OPENGL_INCLUDE_DIRS})
target_link_libraries(gl_nbody ${OPENGL_LIBRARIES})

add_subdirectory("src")
add_subdirectory("include")

我不确定我做错了什么。我看过this 的帖子。但是,发布的解决方案并没有解决我的问题。 cmake 的输出是:

-- Configuring done
CMake Error: CMake can not determine linker language for target:gl_nbody
CMake Error: Cannot determine link language for target "gl_nbody".
-- Generating done
-- Build files have been written to: /home/jared/projects/gl_nbody

编辑: 我发现问题是由于我的 include 目录中的 CMakeLists.txt 文件造成的。这里是:

file(GLOB gl_nbody_HEADER 
    "*.h"   
)

#add_executable(gl_nbody ${gl_nbody_HEADER})

让我感到奇怪的是,我的 src 目录中有一个类似的文件,唯一的区别是它添加了 .cpp 文件而不是 .h 文件。但是,当我尝试将头文件添加到我的项目时出现链接错误。

【问题讨论】:

    标签: c++ cmake


    【解决方案1】:

    add_subdirectory 表示添加包含CMakeLists.txt 文件的子目录。当你需要告诉CMake你的头文件放在哪里时,你需要使用include_directory

    include_directories (
        ${OPENGL_INCLUDE_DIRS}
        ${SDL2_INCLUDE_DIRS}
        ${PROJECT_SOURCE_DIR}/include
    )
    

    我还建议您像这样合并和更改文件中的一些指令(我不确定FIND_PACKAGE 指令,但我认为其余指令看起来是正确的):

    CMAKE_MINIMUM_REQUIRED (VERSION 2.8)
    CMAKE_POLICY           (SET CMP0002 OLD)
    
    FIND_PACKAGE      (OpenGL REQUIRED)
    FIND_PACKAGE      (SDL    REQUIRED)
    
    PROJECT (gl_nbody C CXX)
    
    INCLUDE (FindPkgConfig)
    
    INCLUDE_DIRECTORIES (
        ${SDL2_INCLUDE_DIRS}
        ${OPENGL_INCLUDE_DIRS}
        ${PROJECT_SOURCE_DIR}/include
    )
    
    SET (
        gl_nbody_SRS
        ${PROJECT_SOURCE_DIR}/src/main.cpp
    )
    
    ADD_EXECUTABLE (
        gl_nbody
        ${gl_nbody_SRS}
    )
    
    TARGET_LINK_LIBRARIES (
        gl_nbody
        ${OPENGL_LIBRARIES}
        ${SDL2_LIBRARIES}
    )
    
    SET_TARGET_PROPERTIES (
        gl_nbody
        PROPERTIES LINKER_LANGUAGE CXX
    )
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-02-06
      • 1970-01-01
      • 2019-03-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-01
      • 1970-01-01
      相关资源
      最近更新 更多