试图包括我的源文件的问题
CMake issues with trying to include my source files
我正在尝试使用Linux上的CLION IDE,并且我正在迁移SFML应用程序。它坚持使用我目前遇到问题的CMAKE。
cmake_minimum_required(VERSION 2.6)
project(SFML2)
include_directories("${PROJECT_BINARY_DIR} src/")
include_directories("${YOUR_DIRECTORY} src")
# Define sources and executable
set(EXECUTABLE_NAME "SFML")
add_executable(${EXECUTABLE_NAME} src/SFML.cpp)
# Detect and add SFML
set(CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake_modules"
${CMAKE_MODULE_PATH})
find_package(SFML 2 REQUIRED system window graphics network audio)
target_link_libraries(${EXECUTABLE_NAME} ${SFML_LIBRARIES})
# Install target
install(TARGETS ${EXECUTABLE_NAME} DESTINATION bin)
# CPack packaging
include(InstallRequiredSystemLibraries)
但是,我继续构建错误
CMakeFiles/SFML.dir/src/SFML.cpp.o: In function `main':
SFML.cpp:(.text+0xca): undefined reference to `Game::Game()'
SFML.cpp:(.text+0xd9): undefined reference to `Game::run()'
CMakeFiles/SFML.dir/src/SFML.cpp.o: In function `Game::~Game()':
SFML.cpp:(.text._ZN4GameD2Ev[_ZN4GameD5Ev]+0xa2): undefined reference to `Player::~Player()'
SFML.cpp:(.text._ZN4GameD2Ev[_ZN4GameD5Ev]+0xb4): undefined reference to `Player::~Player()'
SFML.cpp:(.text._ZN4GameD2Ev[_ZN4GameD5Ev]+0x18b): undefined reference to `Player::~Player()'
SFML.cpp:(.text._ZN4GameD2Ev[_ZN4GameD5Ev]+0x1a2): undefined reference to `Player::~Player()'
collect2: error: ld returned 1 exit status
CMakeFiles/SFML.dir/build.make:90: recipe for target 'SFML' failed
make[2]: *** [SFML] Error 1
CMakeFiles/Makefile2:60: recipe for target 'CMakeFiles/SFML.dir/all' failed
make[1]: *** [CMakeFiles/SFML.dir/all] Error 2
Makefile:136: recipe for target 'all' failed
make: *** [all] Error 2
游戏参考与sfml.cpp的位置相同,这是所有内容都从中启动的地方。
目前在Eclipse CDT
两个建议
我不确定您打算如何处理包含路径。我的猜测是,这是一些实验的剩下的。您已经告诉CMAKE查看两个目录,这两个目录都有空间。因为您可能没有其中有空间的目录,所以我认为可以安全地删除它。
include_directories("${PROJECT_BINARY_DIR} src/")
include_directories("${YOUR_DIRECTORY} src")
我不确定这些变量的定义在哪里,但也许您是说这个变量
include_directories(src)
第二,Cmake可以使用通配符,但这不是推荐的方法。您应该在add_exectuable()
调用中明确列出所有源代码文件,即
add_exectuable(${EXECUTABLE_NAME}
src/SFML.cpp
src/SFML.h
src/other.cpp
src/other.h
# and so on
)
不需要添加标题文件,但是如果您将其编译为Visual Studio,则可以很好。
只是任何可能偶然发现这个问题的人的更新。我将这几行编辑到我的代码
中# Define sources and executable
set(EXECUTABLE_NAME "SFML")
file(GLOB SRC
"src/*.h"
"src/*.cpp"
)
add_executable(${EXECUTABLE_NAME} ${SRC})
似乎现在起作用了,谁能确认这是否是正确的方法?
相关文章:
- 警告处理为错误这里有什么问题
- 最小硬币更换问题(自上而下方法)
- 为"adjacent"变量赋值时出现问题
- 我的神经网络不起作用 [XOR 问题]
- 在Ubuntu 16.04上安装Cilk时出现问题
- C++我的数学有什么问题,为什么我的代码不能正确循环
- 编译包含字符串的代码时遇到问题
- Project Euler问题4的错误解决方案
- 问题:什么是QAbstractItemView::NoEditTriggers的反面
- 在编译C++代码(具有dlib和opencv)到WASM时面临问题
- 有关从C++中的不同源文件引用类的问题
- C++ SD 总线源文件编译问题
- 用libclang解析源文件 - 链接问题包括文件
- QtCreator - 编译问题 - 外部源文件
- 试图包括我的源文件的问题
- C++中跨源文件的函数声明问题
- sed/regex - 更新具有范围问题的源文件
- 源文件编译器错误 - 常见问题
- 编译多源文件时未解决的外部问题
- 将lambda传递给模板类中的方法(头文件/源文件问题)