在 CMake 项目下编译单个文件?

新手上路,请多包涵

我正在开发一个 C++ 项目,该项目将包含在一个更大的项目中。

我已经看到在更大的项目中(是一个 Qt 应用程序,它是从 qmake 生成的)我能够从 linux 命令行编译单个文件,只需输入特定文件的相对路径作为 make 的参数。

另一方面,我在自己的项目中使用 CMake。当我为一个编译单元修改一些代码并且我必须修改它的头文件时,我必须等待很长时间才能编译它的依赖项,然后编译它自己的源文件。但是在某些情况下,我更愿意检查 *.cc 文件中的源代码是否可以无错误地编译。

有没有办法像 qmake 那样从 CMake 生成 Makefile?切换到 qmake 不再是一种选择。

原文由 pacorrop 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 912
2 个回答

您不必向 CMake 脚本添加额外的自定义目标,因为 CMake 生成的 Makefile 已经包含每个 .cc 文件的 .o 目标。例如,如果您有一个名为 mySourceFile.cc 的源文件,那么您的构建目录中将有一个 Makefile 定义一个名为 <Some Path>/mySourceFile.cc.o 的目标。 If you cd into your build directory, you can use grep or ack-grep to locate the Makefile that defines this target, then cd into该 Makefile 的目录并构建它。

例如,假设命令 ack-grep mySourceFile.cc.o 打印如下内容:

 foo/bar/Makefile
119:x/y/z/mySourceFile.o: x/y/z/mySourceFile.cc.o
123:x/y/z/mySourceFile.cc.o:
124:    # recipe for building target

然后您可以通过以下方式构建 mySourceFile.cc.o

 cd foo/bar && make x/y/z/mySourceFile.cc.o

原文由 Ose 发布,翻译遵循 CC BY-SA 3.0 许可协议

不是开箱即用的。 CMake 不会在主 makefile 中公开那些“内部”makefile 规则。

仅当您考虑 CMake 在内部使用哪种文件结构时才能执行此操作。例如,您可以使用 CMake 生成的 makefile 调用编译单个 .obj 文件

make -f CMakeFiles/myProg.dir/build.make CMakeFiles/myProg.dir/main.cc.obj

当你有类似的东西时

cmake_minimum_required(VERSION 3.1)

project(myProg CXX)

file(WRITE "main.cc" "int main()\n{\nreturn 0;\n}")
add_executable(myProg main.cc)

原文由 Florian 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题