【发布时间】:2014-11-27 16:39:45
【问题描述】:
我创建了一个项目,其中包含一个 main.cpp 文件和另一个类(名为 Physical),该类分为一个 Physical.hpp 文件和 Physical.cpp 文件。
项目文件结构如下:
main.cpp
header/Physical.hpp
src/Physical.cpp
项目编译得很好,但前提是我以不同的方式包含 Physical.hpp,具体取决于我是从 Physical.cpp 文件还是 main.cpp 文件中包含。
从主文件,我必须使用:
#include "header/Physical.hpp"
然而,我必须使用 Physical.cpp 文件:
#include "../header/Physical.hpp"
为什么会出现这种差异?我希望它与我的 cmake 配置文件有关,尽管我真的不确定。下面是我的 cmake 配置文件。
cmake_minimum_required(VERSION 2.8.4)
project(gravity_simulator ${PROJECT_BINARY_DIR})
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
set(SOURCE_FILES main.cpp src/Physical.cpp)
include_directories("${PROJECT_BINARY_DIR}")
add_executable(gravity_simulator ${SOURCE_FILES})
# Detect and add SFML
set(CMAKE_MODULE_PATH "/usr/share/SFML/cmake/Modules/" ${CMAKE_MODULE_PATH})
#Find any version 2.X of SFML
#See the FindSFML.cmake file for additional details and instructions
find_package(SFML 2 REQUIRED system window graphics network audio)
if(SFML_FOUND)
include_directories(${SFML_INCLUDE_DIR})
target_link_libraries(gravity_simulator ${SFML_LIBRARIES})
endif()
【问题讨论】:
-
您应该尝试添加文件(GLOB HEADER_FILES "${CMAKE_SOURCE_DIR}/header/*.hpp") 来收集标题。并 include_directories(${CMAKE_SOURCE_DIR}/header) 提供搜索路径。不要忘记你的目标并指定 headers 变量 add_executable(gravity_simulator ${SOURCE_FILES} ${HEADER_FILES})
-
@AlexanderBorodulya 在 CMake 中不赞成对源文件或头文件进行通配。有关原因的概述,请参阅stackoverflow.com/a/18538444/393701。另外,不需要列出头文件,因为 CMake 可以通过分析源文件自动检测包含文件的依赖关系。
标签: c++ compilation linker cmake