【问题标题】:cmake - show other class files in projectcmake - 显示项目中的其他类文件
【发布时间】:2017-12-30 13:37:04
【问题描述】:

我最近在我的项目中开始使用 cmake,并设法使用 CMAKE 包含 SDL。

现在我添加了一个简单的类文件,它包含在我的main.cpp

再次配置/生成项目后,我的源文件如下所示:

我的设置

CMakeLists.txt

cmake_minimum_required (VERSION 3.3.2)
project (2dgameengine)

set(MAIN_FILE
    src/main.cpp
)

add_executable(2dgameengine
    ${MAIN_FILE}
)

target_sources(2dgameengine PUBLIC ${EXTRA_FILE})


set (SDL2_INCLUDE_DIR libs/sdl2/include)
set (SDL2_SOURCE_DIR libs/sdl2/src)
include_directories(${SDL2_INCLUDE_DIR} ${SDL2_INCLUDE_DIR})
target_link_libraries(2dgameengine ${SDL2_LIBRARY})

main.cpp

#include <iostream>
#include <SDL.h>


#include "Tile.cpp"

int main () {

 return 0;
}

平铺.cpp

class Tile {
   // ...
}

如何使 Tile.cpp 在我的 xcode 项目中可见?

编辑 这在任何时候都不会影响现实世界。我只是懒得将我的 *.cpp 类拆分为 *.h 和 *.cpp 文件。所以我只包含了 *.cpp 文件——即使它不是正确的方式——这只是为了测试目的

我试图在 cmake 中将它设置为另一个源文件,但它不起作用,因为它包含在我的“main.cpp”中,这会导致链接器错误

【问题讨论】:

  • 通常包含的文件具有.h 扩展名(header 文件),而不是.cppsource 文件)。 make Tile.cpp visible in my xcode project 是什么意思?为了使程序可编译,您需要指定包含目录,该目录包含包含的文件。
  • 您将.cpp 文件包含在另一个.cpp 文件中的原因是什么?这是非常不标准的。
  • 这是cmake内部的一个问题,因为cmake对待头文件和源文件的方式不同,它通过扩展名来推断文件是头文件还是源文件。
  • @Oliv - 谢谢。这有很大帮助。我也尝试将其拆分为 hpp 和 cpp 也可以正常工作

标签: c++ xcode cmake


【解决方案1】:

在目标源中正常包含文件:

add_executable(2dgameengine
    ${MAIN_FILE}
    src/Tile.cpp
)

并告诉 CMake 将其视为头文件:

set_property(SOURCE src/Tile.cpp PROPERTY HEADER_FILE_ONLY TRUE)

这将阻止 CMake 为其生成编译规则。

【讨论】:

  • 谢谢。是否也可以在项目结构中显示 *.h 文件?如果我想编辑它们,我总是必须在运行 cmake 后将它们重新包含在我的项目中
  • @xhallix 当然是。只需在目标中列出它们。您甚至不必将它们设置为仅标头,CMake 会根据扩展名识别它们。事实上,出现在 IDE 中正是为什么鼓励 CMake 实践列出目标的所有组成文件,而不仅仅是编译的文件。
  • @xhallix 旁注:为什么MAIN_FILE 变量?您可以直接列出文件。
  • 是的,你是对的 - 它是“做任何事情来让它工作” - relict ;)
  • 您能否给我一个简短的提示,说明“只需在目标中列出它们”是什么意思?安静的 cmake 新手 - 你指的是 target_sources 吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-30
  • 2018-04-13
  • 1970-01-01
相关资源
最近更新 更多