【问题标题】:What is the CMake equivalent of the GCC -c option?GCC -c 选项的 CMake 等效项是什么?
【发布时间】:2017-11-05 19:56:46
【问题描述】:

例如,如果我有一个包含以下内容的 makefile

dynArray.o: dynArray.c dynArray.h type.h 
    gcc -Wall -ansi -c dynArray.c

我如何将其转换为CMakeLists.txt 文件?

【问题讨论】:

  • 我对你的目的有点困惑。如果您生成一个 Unix Makefile,您(隐式地)将所有单独的目标文件作为目标(检查make help)。您显然想对目标文件做更多的事情,为什么不告诉我们?
  • 我们的教授给了我们一个 makefile,其中内置了我们需要开发的项目的命令(dynArray 文件)。我使用 CLion 作为我的开发环境,它使用 CMake 而不是 make,所以我正在尝试翻译 make 文件,以便我可以在编写代码时对其进行测试。
  • 您不会将 Makefile 文件“翻译”成 CMake。如果您正在寻找一个快速的“使这项工作”解决方案,我理解您的困境,但这让 CMake 非常不受欢迎。 CMake 在比 Makefile 更高的抽象级别上工作。 (这就是为什么它可以使用一个配置文件来生成 Makefile、Ninja 文件或 MSVC 项目。)
  • CMake 已经完成了您的要求,只需要求它编译一个 .c 文件。在决定如何处理目标文件之前,我不知道有任何生成器不会从单个源文件构建单个目标文件(将它们链接到共享库,将它们链接到可执行文件,将它们归档到静态库等.)

标签: c gcc makefile cmake


【解决方案1】:

可能CMake's object libraries 会这样做,这意味着编译对象但不像普通库那样归档它们。

add_library(<name> OBJECT <src>...)

【讨论】:

  • 它向我抛出了这个错误:CMake 错误:目标 DynArray 具有不应该的依赖信息。您的缓存可能已过时。请删除条目
  • 更新:我删除了我的 CMakeCache.txt 文件,然后执行 File->Reload CMake Project,这似乎解决了问题!谢谢!
  • 也许它不起作用。我运行它,它说 [%100] Build target DynArray 但还有一个错误: Error running 'DynArray': File not found: C:\code\c_programming\cs261\assignment_4\cmake-build-debug\DynArray
  • @TaylorLiss:找到告诉 CMake “运行”对象库的点。这很可能与原始问题无关——您向我们展示的 Makefile 片段也没有“运行” dynArray,因此必须有一些其他配置项。也许一些 add_test() 或类似的。错误消息应该包含有关导致错误的 CMake 配置位置的提示。
  • IMO,你不需要这样做,它只会让事情变得过于复杂。如果您正在制作可执行文件,只需使用add_executable 并列出源文件。 CMake 的生成器会一一编译源文件,然后从生成的对象链接可执行文件。
【解决方案2】:

由于单独的目标文件不是您正在构建的最终结果,我怀疑缺少的问题有更多上下文。您可能正在从对象构建可执行文件。只需使用add_executable 指定您的目标和构成目标的源文件。然后使用target_compile_definitions 指定编译该目标的源文件时所需的编译选项。例如:

add_executable(dynArray dynArray.c dynArray.h type.h)
target_compile_definitions(dynArray PRIVATE -Wall -ansi)

您可以通过使用Unix Makefiles 生成器并将VERBOSE=1 传递给make 命令来验证生成的编译命令是否符合您的预期:

mkdir build; cd build
cmake -G "Unix Makefiles" ..
make VERBOSE=1

这将导致生成的 Makefile 显示在构建的每个步骤中使用的完整命令行。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-07-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-21
    • 2011-02-14
    相关资源
    最近更新 更多