【问题标题】:(CLion/CMake) Why does my c file not belong to any target project when it is saved within the project directory?(CLion/CMake) 为什么我的 c 文件保存在项目目录中时不属于任何目标项目?
【发布时间】: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 错误,程序现在可以正确编译,谢谢! :)

标签: c cmake directory clion


【解决方案1】:

来自cmake manual

add_executable( [WIN32] [MACOSX_BUNDLE] [EXCLUDE_FROM_ALL] [来源1] [来源2 ...])

添加一个从命令调用中列出的源文件构建的可执行目标。 (如果后面使用 target_sources() 添加源文件,这里可以省略。)

所以要使用两个源文件编译一个可执行文件,你只需使用:

add_executable(target_name source1.c source2.c)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-12-18
    • 1970-01-01
    • 1970-01-01
    • 2018-03-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多