tl;dr質問は一番下にあります。
私は何か新しいことを試みている開発者です-私の最後の毒はc++です。私は自分の時間の半分をLinuxラップトップに費やし、残りの半分をWin XP PCに費やしているので、優れたc ++プラクティスを使用して、基本的なベアボーンプロジェクトを作成する方法を見つけようとしました(経験からはわかりませんが、私はそれらについて読んだだけです)。現在、私のプロジェクトcmake . && make
はLinuxで使用している間はほとんど機能します(ヘッダーファイルとソースファイルが同じフォルダーにある場合は機能しますが、/ srcフォルダーを含めるように分離すると失敗します)。私はWindowsでnuwenのmingwのディストリビューションを使用しています(ツールチェーンが機能していることはわかっています。Eclipse内から問題なくプロジェクトをコンパイルします)。
私のプロジェクトディレクトリは次のようになります。
engine
|
|- main
|
|- include
|
|- App.h
|- CMakeLists.txt (2)
|- src
|
|- main.cc
|- App.cc
|- CMakeLists.txt (3)
|- CMakLists.txt (1)
ファイルの内容は非常に単純です(わかりやすくするためにインクルードガードなどを削除します)
App.h:
class App {
public:
App();
int onExecute();
};
App.cc:
#include <iostream>
#include "App.h"
App::App() {
}
int App::onExecute() {
std::cout << "inside app.." << '\n';
return 0;
}
main.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をincludeディレクトリに移動する)で、すべてがLinuxで正常にコンパイルおよび実行されます-しかし、mingwジェネレーターをWinXPで動作させることができません。適切なmake.exeを指すようにファイルCMakeCache.txtのCMAKE_MAKE_PROGRAMを手動で調整しました(これはシステム変数として定義する必要があることはわかっていますが、さまざまなPCで作業しているため、後でジャンクを残したくありません自分)。
私の質問は次のとおりです。
1)マルチプラットフォームのCMakeLists.txtファイル(OSとプロジェクトファイルの場所に関係なく機能します)を作成するためのガイドラインは何ですか?これにより、プロジェクト構成を一方のOSからもう一方のOSに簡単に切り替えることができますか?
2)ヘッダーファイルが見つからないというエラーに対処するにはどうすればよいですか(make give:(...)\ engine \ main \ src \ main.cc:2:17:致命的なエラー:App.h:そのようなファイルまたはディレクトリはありません)?
お手数をおかけしますが、よろしくお願いいたします。