【发布时间】:2018-10-15 23:04:44
【问题描述】:
前言:我对 c 和 CLion 很陌生,如果我的措辞非常错误,请提前道歉。
基本上,我的作业涉及两个 c 文件(一个“主”文件,一个执行英制和公制单位之间的转换)。主 c 文件只是简单地 #include-s 转换文件,在转换文件中执行一个函数,并将结果值打印给用户。很简单,但每次我尝试运行它时都会收到一条消息:
“对‘转换’的未定义引用”
我试图解决这个问题,我唯一的想法与conversion.c顶部的横幅有关,上面写着“此文件不属于任何项目目标,代码洞察功能可能无法正常工作。”。我不明白为什么会收到这条消息,因为conversion.c 和main.c 都在主项目目录中,而且这个设置在我之前的作业中运行良好。
我在网上搜索了解决方案,唯一一个似乎有意义的方法是更新我的 CMakeLists.txt 文件以包含 add_executable(project conversion.c)。这是我添加此行之前的 CMakeLists.txt 文件的样子:
cmake_minimum_required(VERSION 3.12)
project(project C)
set(CMAKE_C_STANDARD 11)
add_executable(project main.c)
但是,当我添加它时,我得到了错误:
CMake Error at CMakeLists.txt:7 (add_executable):
add_executable cannot create target "directory" because another
target with the same name already exists. The existing target is an
executable created in source directory
"/home/john_s/CLionProjects/project". See documentation for
policy CMP0002 for more details.
大概这是因为我的上一行 (add_executable(project main.c)) 链接到同一个目录,但我不知道如何解决这个问题。有什么建议吗?
【问题讨论】:
-
您错误引用了 CMakeLists.txt 行 7,但您发布了一个包含 6 行的 CMakeLists.txt 文件。该错误也很容易解释。您需要通过
file(GLOB_RECURSE src dir/*.c) add_executable(project_name ${srcs})明确告诉 cmake 将所有源添加到可执行文件。并且 cmake 不允许创建具有相同名称的目标/可执行文件。 “目录”不是目录,而是目标名称。 -
CMakeLists.txt 文件最初是 6 行,但后来我添加了一个新行“add_executable(project conversion.c)”,然后出现 CMake 错误。我试图添加建议的行,但我以前从未使用过这些行,所以我遇到了一些错误。 “srcs”是我放 c 文件名的地方吗?如果是这样,我似乎找不到在其中包含多个名称的方法。
-
你不能有两个同名的可执行文件。你只是
add_executable(project main.c conversion.c)是你的意思吗?您可以将源代码放在您想要的任何文件夹、目录和路径中。 -
哦,好吧,抱歉,我不知道您可以将两个 .c 文件放在同一个 add_executable(...) 行中。不过,这解决了 CMake 错误,程序现在可以正确编译,谢谢! :)