tl;博士问题在底部。
我是一名尝试新事物的开发人员——我最后的毒药是 C++。由于我一半时间花在我的 linux 笔记本电脑上,另一半时间花在 Win XP PC 上,我试图找到一种方法来创建基本的准系统项目,使用良好的 c++ 实践(嗯,我不从经验中了解它们,我刚读到他们)。现在我的项目cmake . && make
在 linux 上使用时几乎可以工作(当头文件和源文件在同一个文件夹中时它可以工作,当我将它们分开到 include / src 文件夹时会失败)。我在 Windows 上使用 nuwen 的 mingw 发行版(而且我知道工具链正在工作,它从 Eclipse 中编译项目没有任何问题)。
我的项目目录如下所示:
engine
|
|- main
|
|- include
|
|- App.h
|- CMakeLists.txt (2)
|- src
|
|- main.cc
|- App.cc
|- CMakeLists.txt (3)
|- CMakLists.txt (1)
文件的内容非常简单(为了清楚起见,我将删除包含保护等)
应用程序.h:
class App {
public:
App();
int onExecute();
};
应用程序.cc:
#include <iostream>
#include "App.h"
App::App() {
}
int App::onExecute() {
std::cout << "inside app.." << '\n';
return 0;
}
主.cc:
#include <iostream>
#include "App.h"
using namespace std;
int main(int argc, char* argv[]) {
App a;
a.onExecute();
std::cout << "inside main.." << '\n';
}
CMakeLists.txt (1) - 主要的:
cmake_minimum_required (VERSION 2.6)
set (CMAKE_CXX_COMPILER "g++")
project (gameengine)
add_definitions ( "-Wall -ansi -pedantic")
add_subdirectory (${CMAKE_SOURCE_DIR}/main/include)
add_subdirectory (${CMAKE_SOURCE_DIR}/main/src)
add_executable (engine ${CMAKE_SOURCE_DIR}/main/src/main.cc)
target_link_libraries (engine Application)
CMakeLists.txt (2) - 在包含目录中
add_library (Application App)
set_target_properties (Application PROPERTIES LINKER_LANGUAGE CXX)
CMakeLists.txt (3) - src 目录内
include_directories (../include)
这就是我所得到的 - 通过一些更改(即将 App.cc 移动到包含目录),整个东西在 linux 上编译并运行良好 - 但我无法让 mingw 生成器在 Win XP 上工作。我手动调整文件 CMakeCache.txt 中的 CMAKE_MAKE_PROGRAM 以指向正确的 make.exe(我知道这应该定义为系统变量,但由于我在许多不同的 PC 上工作,我不想在之后留下垃圾我)。
我的问题是:
1) 编写多平台 CMakeLists.txt 文件的准则是什么(它将独立于操作系统和项目文件的位置工作),这最好能让我轻松地从一个操作系统切换我的项目配置?
2)如何解决找不到头文件的错误(make给出:(...)\engine\main\src\main.cc:2:17:致命错误:App.h:没有这样的文件或目录) ?
感谢您的时间和帮助。