我是cmake的全新新手,请原谅我这个问题但在谷歌找不到答案。
我试图在Ogre3d sdk上创建一个空项目。 我使用cmake和vs2015构建了ogre3d源代码,现在我想在ogre libs和header之上创建我的项目。所以解释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但它会生成一个.sln文件只包含ALL_BUILD和ZERO_CHECK。 我如何创建一个具有所有配置的干净项目,并且已经准备好使用ogre类(我的意思是它自动配置链接,包括等)。
答案 0 :(得分:2)
CMake术语与Visual Studio略有不同。
特别是,每个CMake project
将创建一个Visual Studio解决方案(.sln
文件),而属于该CMake项目的所有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中we prefer to not use the library directory for telling the build system of the library's location,但始终使用库文件的完整路径。