C++ 为新手创建一个CMakeFiles.txt文件

C++ 为新手创建一个CMakeFiles.txt文件,c++,cmake,linkage,C++,Cmake,Linkage,我有一个具有以下结构的项目 /cmake_modules/ FindSFML.cmake /includes/ car.hpp motor.hpp tires.hpp /sources/ car.cpp motor.cpp tires.cpp /main.cpp /main.hpp 我有以下cmakfiles.txt文件: cmake_minimum_required(VERSION 2.8) project

我有一个具有以下结构的项目

  /cmake_modules/
    FindSFML.cmake
  /includes/
    car.hpp
    motor.hpp
    tires.hpp
  /sources/
    car.cpp
    motor.cpp
    tires.cpp    
  /main.cpp
  /main.hpp
我有以下
cmakfiles.txt
文件:

cmake_minimum_required(VERSION 2.8)

project (MYGAME)
set (MYGAME_VERSION_MAJOR 1)
set (MYGAME_VERSION_MINOR 0)

set (EXECUTABLE_NAME "mygame")

include_directories ("${MYGAME_BINARY_DIR}")
include_directories ("${MYGAME_BINARY_DIR}/includes")
link_directories ("${MYGAME_BINARY_DIR}/sources")

add_executable(${EXECUTABLE_NAME} main.cpp)

set(CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake_modules" ${CMAKE_MODULE_PATH})
find_package(SFML 2.0 REQUIRED system window graphics network audio)

target_link_libraries(${EXECUTABLE_NAME} ${SFML_LIBRARIES})

当我尝试执行
make
时,我得到以下结果:

[100%] Building CXX object CMakeFiles/mygame.dir/main.cpp.o
Linking CXX executable mygame
CMakeFiles/mygame.dir/main.cpp.o: In function `main':
main.cpp:(.text+0x11): undefined reference to `mynamespace::Car::Instance()'
main.cpp:(.text+0x21): undefined reference to `mynamespace::Car::start()'
collect2: error: ld returned 1 exit status
make[2]: *** [mygame] Error 1
make[1]: *** [CMakeFiles/mygame.dir/all] Error 2
make: *** [all] Error 2

如何修复它?

您需要以某种方式在构建中包含其他源代码(car.cpp、motor.cpp和tires.cpp)

您可以将它们与main.cpp一起直接添加到可执行文件中:

set(MySources sources/car.cpp sources/motor.cpp sources/tires.cpp main.cpp)
添加可执行文件(${executable\u NAME}${MySources})
或者,您可以将这些内容制作成库并链接到:

set(MyLibSources源/car.cpp源/motor.cpp源/tires.cpp)
添加库(MyLib${MyLibSources})
添加可执行文件(${executable\u NAME}main.cpp)
...
目标链接库(${EXECUTABLE\u NAME}MyLib${SFML\u libraries})
还有几点需要注意:


如果可能的话,您应该避免使用(它自己的文档不鼓励使用),并且在通过
add_executable
add_library
添加的文件列表中包含标题通常会很有帮助,因为这些标题会出现在诸如MS Visual Studio之类的IDE中。

我已经删除了
link_目录
added
set(MyLib car.cpp…)
添加库
但现在我发现一个错误,无法找到源文件car.cpp抱歉-我修复了示例。您需要包括“源”目录位于源文件的相对路径中。是否以某种方式包含
sources/*.cpp
?您可以使用创建列表,但请确保您阅读了文档中有关使用GLOB或GLOB\u的警告。