【问题标题】:Writing a makefile for a C++ program为 C++ 程序编写 makefile
【发布时间】:2013-02-04 05:53:02
【问题描述】:

有人可以帮我编写我的第一个 makefile 吗?

我在/path/to/main/code/helloworld.cpp 中有一个helloworld.cpp 代码。 然后我刚刚包含了一个.h 文件#include "SFML/network.hpp"

现在SFML库保存在/path/to/SFML/Library

如果有人能帮助我开始这件事,那就太好了。与此同时,我正在尝试通读文献,但它非常压倒性。

【问题讨论】:

  • @JonathanLeffler:我很抱歉那个错字:(它的 cpp。谢谢

标签: c++ makefile cmake


【解决方案1】:

虽然您可能需要学习传统的 GNU Makefile 语法才能使用其他项目,但我建议您在自己的项目中使用 CMake,因为它更简单、更直观。

您的示例的 CMake 文件将放入项目根目录中名为 CMakeLists.txt 的文件中(在本例中与源相同),如下所示:

project(HelloWorld)                        # Name your project.
add_executable(helloworld helloworld.cpp)  # Specify an executable to build.
link_directories(/path/to/SFML)            # Tell it where your libraries are.
target_link_libraries(helloworld Library)  # Tell it which library to link.

如果您希望能够#include SFML 中的标头而不每次都包含目录名称,那么您也可以这样写:

include_directories(SFML)                  # Tell it where your headers are.

website 上提供了有关编写 CMake 文件和运行 CMake 的更多文档。

最后,CMake 经常会发出嘈杂但无害的消息,要求您在 CMakeLists.txt 文件的顶部放置这样的一行:

cmake_minimum_required(VERSION 2.8)        # Quell warnings.

干杯。

【讨论】:

  • 感谢您的回复。在 SFML.. 中有 src、build 等文件夹,而我需要的文件实际上在 /path/to/SFML/include/SFML/network.hpp 中?我会在哪里指定这个?谢谢
  • 然后写include_directories(/path/to/SFML/include/SFML)
【解决方案2】:

它本身可能很简单,但只是想推荐genmake.pl,我在我的学校项目中使用它效果很好。它很容易使用,它会为你生成一个骨架 Makefile,你需要填写诸如SFML 的路径之类的东西。

【讨论】:

    【解决方案3】:

    如果您使用的是 ACE(自适应通信环境),它带有一个非常强大的 makefile 创建实用程序,称为 MPC (Makefile Project Creator)

    要编译一个简单的程序并自动生成 GNU makefile,一个最小的例子可能是:

    project(*my_project) : baseWorkspace {
           exename = my_project
           exeout = ./
           Source_Files {
              main.cpp
           }
       }
    

    我发现使用这个工具的美妙之处在于它可以继承“基础”工作区,几乎就像 C++ 中的多态性一样。 “base”中定义的库在当前项目中使用,允许程序员利用各种构建块轻松操作和快速创建项目。

    我确信只有 ACE 的 MPC 部分可以通过 RPM 下载和使用,我会四处搜索,看看能否找到适合您的示例。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-12-22
      • 1970-01-01
      • 1970-01-01
      • 2014-02-28
      • 2011-08-22
      • 1970-01-01
      • 1970-01-01
      • 2021-03-12
      相关资源
      最近更新 更多