【问题标题】:Cmake how to make header files automatically include their source filesCmake如何使头文件自动包含其源文件
【发布时间】:2011-03-24 00:00:15
【问题描述】:

如果这个问题已经得到解答,我深表歉意,我已经搜索了一段时间,但没有找到直接的答案。

我习惯于 windows visual c++,我使用头文件 (*.h) 来声明类及其函数和源文件 (*.cpp),其中对实际类的函数进行了详细编码。我现在正在使用使用cmake 的Kdevelop 在Linux 下工作。我创建了一些带有类的头文件并声明了它们的函数,然后在它们各自的源文件中对函数进行了编码。每次我尝试构建时,都会收到错误消息,指出 Class::function() 是未定义的引用。如果我在头文件中添加实际函数,则构建工作正常。所以我假设cmake 没有正确链接头文件的相应源文件。我假设这会自动发生,但我现在猜测情况并非如此。我怎样才能做到这一点?对于我创建的每个头文件,使用与源文件完全相同的名称,是否将其全部链接并构建?

如果已经回答了,请发布链接,如果没有,我希望得到一个简单的解释。我知道有很多方法可以做到这一点(autoconfmake dep 等?)但现在我坚持使用cmake

【问题讨论】:

    标签: hyperlink header cmake


    【解决方案1】:

    这是一个名为 Test 的项目的 CMakeLists.txt 示例,它将两个源文件链接到一个名为 test 的可执行文件中。

    cmake_minimum_required( VERSION 2.6 )
    project( Test )
    add_executable( test test.cpp testlib.cpp )
    

    如果您想添加更多源文件,只需将它们添加到列表中即可。

    【讨论】:

    • 谢谢你的工作,但我想没有办法为任何新添加的 foo.h 和 foo.cpp 对自动执行此操作?
    • 有两种方法可以做到这一点。推荐的方法是让 KDevelop 将文件添加到源列表中,如上所示。在技​​术上也可以使用像 file( GLOB source_list *.cpp ) 这样的 cmake 命令来生成目录中的源列表。但是,我只是说这是一个坏主意。如果你这样做了,你必须记住每次添加文件时都要清除整个构建目录,因为 cmake 将无法判断是否添加了新文件。
    • 很抱歉,如果这是说教的话,但我要在我的肥皂盒上站一分钟。 IDE 通常在管理构建系统方面做得很糟糕。特别是当项目变大时。学习一个合适的构建系统真的很值得。如果我处于您的情况,而不是花费大量时间尝试让 KDevelop 生成构建文件;我将学习如何使用 CMake。它不是我最喜欢的构建系统,但它是 IMO 两三个“好”之一。它将在未来支付股息。我现在要离开肥皂盒了;-)
    【解决方案2】:

    在 C++ 中,.cpp 文件的存在并不一定意味着它会在您构建它时链接到您的项目。当您在 Visual Studio 中创建新的.cpp 文件时,VS 会自动将.cpp 文件添加到您的项目中,因此您无需考虑。

    当使用不牵手的工具时,您必须手动将相关的.cpp 文件添加到您的项目文件中。请参阅 CMake 文档以了解如何执行此操作。看起来CMake Tutorial 可能会在这里提供帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-10-07
      • 2018-04-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多