【问题标题】:CMAKE in Visual Studio seems to recognize header files but fail to build anywayVisual Studio 中的 CMAKE 似乎可以识别头文件,但无论如何都无法构建
【发布时间】:2020-09-20 06:04:26
【问题描述】:

我知道这是一个常见问题,但我已经为此浪费了两天时间。

我在 Visual Studio 2019 中有一个 非常 基本 cmake 项目,最终需要为 Linux 和 Windows 编译,但现在我无法超越简单的编译器错误.

我的项目目录(由visual studio提供)如下

Solution
|-Project
| |-Includes
| | |-defines.h
| | |-lib.h
| | |-lib.c 
| |-main.c
| |-CMakeLists.txt
|-CMakeLists.txt
|-CMakeSettings.json

出现的问题是,所有文件中的所有函数都使用智能感知自动完成,所以事情进展顺利。但是,当我尝试构建(针对任何目标)时,我会得到 undefined reference to {name},因为每次引用 lib.h 和 lib.c 文件中的任何内容。

CMakeLists.txt 如下

# CMakeList.txt : CMake project for LabJackStreamPortable, include source and define
# project specific logic here.
#
cmake_minimum_required (VERSION 3.8)

# Add source to this project's executable.
include_directories(Includes)
add_executable (Project "main.c")
# TODO: Add tests and install targets if needed.

我没有更改包含目录或使用target_include_directories 更改任何内容。我已经为所有具有基本包含(stdlib、stdio 等)的目标构建了项目,并构建了从defines.h 引用基本#define 常量。但是 lib.c 文件中的任何函数都会出错。

【问题讨论】:

标签: c visual-studio cmake


【解决方案1】:

在你的例子中,你没有在任何地方指定lib.c,所以这个文件不会被编译。因此,如果您的main.c 文件引用了lib.c 中的anything,您肯定会收到错误消息。

如果您还希望 CMake 编译 lib.c,则需要将其明确列为源文件之一:

add_executable (Project main.c Includes/lib.c)

【讨论】:

  • 项目声明在根列表文件中。我省略了根文件,因为那几乎是那里唯一的东西。
  • 所有这一切都是让我在 lib.c 中得到相同的错误,而不仅仅是在 main.c 中使用的错误
  • @Whistler 在您的机器上,Includes 目录实际上 存在吗?或者这只是 Visual Studio 资源管理器窗口中显示的内容? lib.c 文件是否实际驻留在Includes 目录中?还是main.c 的兄弟姐妹?除了这些问题之外,如果没有看到具体错误或 C 代码,就很难说出剩余的未定义引用错误可能是什么。请将此信息添加到您的问题帖子中。
  • 我不能在明天之前添加代码,但是,是的,该文件夹是真实的。至于错误,想象一个普通的 c 文件。但是每个函数定义都会给出一个错误,该函数无法找到对...自身的引用
猜你喜欢
  • 2014-10-29
  • 2016-05-29
  • 1970-01-01
  • 1970-01-01
  • 2017-08-18
  • 2018-09-23
  • 1970-01-01
  • 2020-12-08
  • 1970-01-01
相关资源
最近更新 更多