c++ - Cmake 添加新项目到解决方案

标签 c++ visual-c++ cmake ogre

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

我正在尝试在 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 的空项目,然后我可以运行我的第一个 ogre helloword 但它生成一个仅包含 ALL_BUILD 和 ZERO_CHECK 的 .sln 文件。 我如何创建一个干净的项目,它具有所有配置并准备好使用 ogre 类(我的意思是它自动配置链接、包含等)?

最佳答案

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

特别是,每个 CMake project将创建一个 Visual Studio 解决方案(.sln 文件),而所有 CMake targets属于该 CMake 项目的项目将在相应的解决方案中显示为 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 中,we prefer to not use the library directory for telling the build system of the library's location ,而是始终使用库文件的完整路径。

关于c++ - Cmake 添加新项目到解决方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46195809/

相关文章:

c++ - 将本地 CStringW 返回给调用者是否安全?

c++ - 在 MacOS 上构建 conan/cmake 项目时的相对 RPATH

c++ - CMakeLists.txt 子文件夹中的 cmake find_package 相对路径

c++ - 在初始化期间将未初始化的字符串分配给自身

c++ - 如何将元素从 vector 转移到新数组?

c++ - std::conditional vs std::enable_if

c++ - 将多个指针作为参数传递给 pthread_create

c++ - 这个 C++ 初始化有效吗?

c++ - 在应用程序构建期间自动复制文件以输出

linux - linux 下使用 Eclipse 和 CMake 的 boost::thread 的链接器问题