Cmake 添加新项目到解决方案

Cmake Add new project to solution

我是 cmake 的新手,所以如果问这个低级问题但在 google 上找不到答案,请原谅。

我正在尝试在 Ogre3d SDK 之上创建一个空项目。 我用 cmake 和 vs2015 构建了一个 ogre3d 源,现在我想在 ogre 库和头文件之上创建我的项目。正如所解释的 here 我创建了一个 cmakelists.txt 文件并将这些行添加到其中:

# specify which version you need
find_package(OGRE 1.10 REQUIRED)

project(OG1)

# the search paths
include_directories(${OGRE_INCLUDE_DIRS})
link_directories(${OGRE_LIBRARY_DIRS})

 # copy essential config files next to our binary where OGRE autodiscovers them
 file(COPY ${OGRE_CONFIG_DIR}/plugins.cfg ${OGRE_CONFIG_DIR}/resources.cfg 
  DESTINATION ${CMAKE_BINARY_DIR})

一切正常,成功创建 cmake 文件并使用 cmake-gui 生成 .sln 但是我希望 cmake 创建一个名为 OG1 的空项目,然后我可以 运行 我的第一个食人魔 helloword 但它生成了一个仅包含 ALL_BUILD 和 ZERO_CHECK 的 .sln 文件。 我如何创建一个干净的项目,它具有所有配置并准备好使用 ogre 类(我的意思是它会自动配置 link、包含等)?

CMake 术语与 Visual Studio 的术语略有不同。

特别是,属于该 CMake 项目的每个 CMake project will create a Visual Studio solution (.sln file), while all of the CMake targets 将在相应的解决方案中显示为 Visual Studio 个项目。

CMake       Visual Studio

project <-> Solution (.sln)
Target  <-> Project (.vcxproj)

所以你的项目显然缺少一个目标。在您的情况下,您可能需要一个可执行目标,它是使用 add_executable 添加的。可执行文件可以与项目同名。请注意,CMake 中的可执行文件不能完全为空。虽然 Visual Studio 中存在空可执行项目的概念,但它在其他构建系统中无效,因此 CMake 也不能不支持它。所以你至少需要在这里指定一个源文件:

add_executable(og1 og1.cpp)

有了它,您还可以将剩余的构建选项附加到目标。此步骤是可选的,因为您的代码也可以在这里工作,但在现代 CMake 中被认为是好的风格:

target_include_directories(og1 PUBLIC ${OGRE_INCLUDE_DIRS})
target_link_libraries(og1 PUBLIC ${OGRE_LIBRARIES})

请注意,在 CMake 中,,但始终使用库文件的完整路径。