c++ - CMake 错误 : Cannot determine link language for target

标签 c++ cmake

<分区>

我创建了以下目录:

FrameWork/
├── CMakeLists.txt ==> contains only add_subdirectory(UtilsBasic)
└── UtilsBasic
    ├── CMakeLists.txt ==> Contains only add_subdirectory(SmartSingleton)
    └── SmartSingleton
        ├── CMakeLists.txt
        ├── include
        │   └── SmartSingleton.hpp

SmartSingleton 目录下的CMakeLists.txt 包含:

set(codeprod_list
        include/SmartSingleton.hpp)

USR_add_shared_lib(SmartSingleton "${codeprod_list}")
target_link_libraries(SmartSingleton PUBLIC Common)
target_include_directories(SmartSingleton PUBLIC include/)

项目的主要CMakeLists.txt如下:

cmake_minimum_required (VERSION 3.4)

project (MyProject)
USR_init_project(MyProject)

add_subdirectory(src/FrameWork)

错误

-- Configuring done CMake Error: CMake can not determine linker language for target: SmartSingleton CMake Error: Cannot determine link language for target "SmartSingleton".

我不明白为什么会出现该错误。我的意思是,在 Framework 中,我创建了一个指向 UtilsBasic 的链接,然后又创建了一个指向 SmartSingleton 的链接。

最佳答案

在你的 SmartSingleton/CMakeLists.txt 文件中试试这个:

set_target_properties(SmartSingleton PROPERTIES LINKER_LANGUAGE CXX)

这将直接告诉 CMake 为该目标使用哪种语言。

如果您的库确实只有头文件,您也可能会收到您提到的错误。考虑将此库设为 INTERFACE 库:

add_library(SmartSingleton INTERFACE)
target_include_directories(SmartSingleton INTERFACE include/)

这是 docs对于 INTERFACE 库。

关于c++ - CMake 错误 : Cannot determine link language for target,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56462415/

相关文章:

c++ - 重载 >> 运算符未在输入上设置属性

c++ - 求解具有两个未知数的两个方程组

c++ - 为什么在linux(cmake)中加载共享库时安装的程序出错

带有工具链文件和 cmake_policy 的 CMAKE

c++ - CMake target_link_libraries 不保留顺序

c++ - 如何将 glm::vec4<float> 转换为 GLfloat*?

c++ - 共享代码布局

c++ - SDL/C++ 没有音频

c++ - CMake - 如何将 Pylon 库包含和链接到 OpenCV-C++ 项目

cmake - CPACK_INSTALL_CMAKE_PROJECTS 可以用于选择性安装吗?