当前位置: 首页 > 知识库问答 >
问题:

CMake无法用C确定链接器语言

吴单鹗
2023-03-14

我试图用Visual Studio 2010和Cygwin在Windows 7 x64上运行cmake hello world程序,但这两个程序似乎都无法运行。我的目录结构如下:

HelloWorld
-- CMakeLists.txt
-- src/
-- -- CMakeLists.txt
-- -- main.cpp
-- build/

我执行<code>cd build</code>,然后执行<code>cmake.</code>,并得到一个错误,说明

CMake Error: CMake can not determine linker language for target:helloworld
CMake Error: Cannot determine link language for target "helloworld".

但是,如果我在filsystem和src/CMakeLists.txt中将main.cpp的扩展名更改为main. c,则一切都按预期运行。这是从Visual Studhtml" target="_blank">io命令提示符(Visual Studio解决方案生成器)和Cygwin终端(Unix Makefiles生成器)运行的情况。

任何想法为什么这个代码不起作用?

制片人.txt

PROJECT(HelloWorld C)
cmake_minimum_required(VERSION 2.8)

# include the cmake modules directory
set(CMAKE_MODULE_PATH ${HelloWorld_SOURCE_DIR}/cmake ${CMAKE_MODULE_PATH})

add_subdirectory(src)

编辑名单.txt

# Include the directory itself as a path to include directories
set(CMAKE_INCLUDE_CURRENT_DIR ON)

# Create a variable called helloworld_SOURCES containing all .cpp files:
set(HelloWorld_SOURCES main.cpp)

# Create an executable file called helloworld from sources:
add_executable(hello ${HelloWorld_SOURCES })

源/主.cpp

int main()
{
  return 0;
}

共有3个答案

巫马令
2023-03-14

尝试更改

PROJECT(HelloWorld C)

到…里面

PROJECT(HelloWorld C CXX)

或者只是

PROJECT(HelloWorld)

请参见: https://cmake.org/cmake/help/latest/command/project.html

顾乐池
2023-03-14

在我的例子中,这只是因为目标中没有源文件。我所有的代码都是一个模板,源代码在头文件中。添加一个空的<code>文件。cpp</code>解决了这个问题。

姚臻
2023-03-14

我也得到你提到的错误:

CMake Error: CMake can not determine linker language for target:helloworld
CMake Error: Cannot determine link language for target "helloworld".

在我的例子中,这是由于C文件带有< code >。cc扩展名。

如果CMake无法正确确定代码的语言,您可以使用以下命令:

set_target_properties(hello PROPERTIES LINKER_LANGUAGE CXX)

建议将语言附加到 project() 语句的公认答案只是增加了对使用的语言的更严格检查(根据文档),但它对我没有帮助:

(可选)您可以指定项目支持的语言。示例语言是 CXX(即 C)、C、福特兰等。默认情况下,C 和 CXX 处于启用状态。例如,如果您没有C编译器,则可以通过明确列出要支持的语言(例如C)来禁用对它的检查。通过使用特殊语言“NONE”,可以禁用对任何语言的所有检查。如果存在名为 CMAKE_PROJECT__INCLUDE_FILE 的变量,则该变量所指向的文件将作为项目命令的最后一步包括在内。

 类似资料:
  • 本文向大家介绍易语言无法定位链接器解决方法,包括了易语言无法定位链接器解决方法的使用技巧和注意事项,需要的朋友参考一下 易语言开发环境的诞生,影响了众多编程爱好者的关注的追捧。的确,很多编程爱好者在使用易语言的同时产生了很多的困惑,这些困惑很多,比如易语言无法定位链接器。 1、首先,打开易语言,创建一个“Windows窗口程序”空白工程,操作如下: 2、进入窗口界面以后,我们不编写任何的代码,就只

  • 我正在尝试链接一个名为libtest lib的预编译共享库文件。所以这是我在CMakeLists的底部所拥有的。txt: 如上所述,我得到以下错误: 如果我注释掉add_library行,我会得到以下结果: 在库中链接时,似乎绝对需要源文件(.c、cpp等)。但我如何在一个。那档案呢?这些文档对target_link_库()做了如下介绍: 被命名的必须是由add_executable()或add_

  • 可能重复: 什么是未定义的引用/未解决的外部符号错误以及如何修复它? 尝试通过编译我的程序 我得到了错误: 不知怎么会进入一个无限循环。

  • 本文向大家介绍VS2019中CMake项目如何指定c++语言标准,包括了VS2019中CMake项目如何指定c++语言标准的使用技巧和注意事项,需要的朋友参考一下 VS2019中CMake项目怎么指定语言标准 博主前几天在使用c++17新特性结构绑定时报错了,代码如下: 后来查了一下发现CMake项目默认的c++语言标准是低于17的,所以就得指定一下语言版本才行。 有两种设置方法。第一种可以设置默

  • 问题内容: 这里有人知道如何通过使用TSQL语句确定链接服务器上运行的SQL版本吗? 我正在运行SQL2005,而链接服务器正在同时运行sql2000、2005和2008。 问题答案: select * from openquery(MyLinkedServer,’SELECT SERVERPROPERTY(‘’productversion’‘)’)

  • 问题内容: 在DirectoryWalker类中,我想确定File实例是否实际上是指向目录的符号链接(假设Walker在UNIX系统上行走)。给定,我已经知道实例是一个目录,以下是否是确定符号链接的可靠条件? 问题答案: 这是Apache代码(根据其许可证使用),为了紧凑而进行了修改。