2011-11-29 17 views
8

私は自分のプロジェクトにcmakeを設定しており、そのためのテストプロジェクトをセットアップしました。私のビジュアルスタジオ2010プロジェクトを生成するとき、私はこれまでのプロジェクトと同じようにしたいと思います。cmakeがビジュアルスタジオプロジェクトを作成する方法を指定します。

  • 私が必要としないALL_BUILDとZERO_CHECKプロジェクトが作成されます。
  • 外部依存関係フォルダーに.hファイルを置きます。すべての.hファイルが保存されるInclude Filesフォルダが必要です。
  • また、いくつかのファイルを異なるフィルタでグループ化する必要があります。私のコアライブラリのように、フォルダ内の数学に関連するすべてのファイルと、別のフォルダ内のイベント管理に関連するすべてのファイルをグループ化したいと思います。
  • ファイルシステム上では、プロジェクトファイルを/ Lib/srcの中に置きます。おそらく、私はそれをコードフォルダに整理しているかもしれませんが、私はプロジェクトファイルに対してそれを望みません。
  • 私はDebugOpenGL、DebugDirectX、ReleaseOpenGL、ReleaseDirectXを持っているので、USE_OPENGLまたはUSE_DIRECTXという2つのタイプの設定に対してフラグを設定するように、別の設定を行いたいと思います。

linuxでビルドしたときに、Windowsなどでビルドすると、いくつかのファイルを除外することができますか?私にはWindowWin.cppとWindowLinux.cppがあります。


私はあなたが推薦し何をしようとしましたが、それは働いて得るカント:私は、ヘッダーとソースファイルのサブフォルダをしたいだけという...

#LibProject/src 

FILE(GLOB test0_headers $CMakeTest_SOURCE_DIR/LibProject/inc/test.h) 
source_group(include0 FILES ${test0_headers}) 
FILE(GLOB test0_source ${CMakeTest_SOURCE_DIR}/LibProject/src/test.cpp) 
source_group(source0 FILES ${test0_source}) 

FILE(GLOB test1_headers $CMakeTest_SOURCE_DIR/LibProject/inc/test1.h) 
source_group(include1 FILES ${test1_headers}) 
FILE(GLOB test1_source ${CMakeTest_SOURCE_DIR}/LibProject/src/test1.cpp) 
source_group(source1 FILES ${test1_source}) 

include_directories(${test0_headers} ${test1_headers}) 

add_library(LibProject ${test0_headers} ${test1_headers} ${test0_source} ${test 
1_source}) 

私は種類のそれは今働いてしまいましたソースグループ内。

set(test_source0 ${CMakeTest_SOURCE_DIR}/LibProject/inc/test.h ${CMakeTest_SOURCE_DIR}/LibProject/src/test.cpp) 
source_group(TEST FILES ${test_source0}) 

set(test_source1 ${CMakeTest_SOURCE_DIR}/LibProject/inc/test2.h ${CMakeTest_SOURCE_DIR}/LibProject/src/test2.cpp) 
source_group(TEST2 FILES ${test_source1}) 

include_directories(${CMakeTest_SOURCE_DIR}/LibProject/inc) 
add_library(LibProject ${test_source0} ${test_source1}) 

相続人は私の解決策:)

set(test_header 
${CMakeTest_SOURCE_DIR}/LibProject/inc/test.h) 
set(test_source 
${CMakeTest_SOURCE_DIR}/LibProject/src/test.cpp) 

source_group(TEST\\Headers FILES ${test_header}) 
source_group(TEST\\Source FILES ${test_source}) 

set(test2_header 
${CMakeTest_SOURCE_DIR}/LibProject/inc/test2.h) 
set(test2_source 
${CMakeTest_SOURCE_DIR}/LibProject/src/test2.cpp) 
source_group(TEST2\\Headers FILES ${test2_header}) 
source_group(TEST2\\Source FILES ${test2_source}) 

include_directories(${CMakeTest_SOURCE_DIR}/LibProject/inc) 

add_library(LibProject 
${test_header} 
${test_source} 
${test2_header} 
${test2_source}) 
+0

ZERO_CHECKとALL_BUILDが何であるかは、http://stackoverflow.com/questions/27175754/what-are-all-build-and-zero-check-and-do-i-need-themを参照してください。 – sashoalm

答えて

7

# Include files 
FILE(GLOB all_headers "include/*.h*") 
source_group("include" FILES ${all_headers}) 

# Source files 
FILE(GLOB all_srcs "src/*.cpp") 
source_group("source" FILES ${all_srcs}) 

これは、Visual Studioに含まというフォルダに表示されるように含めるフォルダに配置されているあなたの.hファイルのすべてを配置します。あなたのcppファイルと同じです。このテクニックを使ってCMakeで独自の構造を作ることができます。

ALL_BUILDおよびZERO_CHECKの目的のために、this answerを読んでください。 ZERO_CHECKの生成を無効にするには、set(CMAKE_SUPPRESS_REGENERATION true)を使用します。

が適切なフォルダOpenGLとDirectXの間、セットアップに選択するには、上記使用したのと同じ手法を使用しますが、私はあなたのアイデアを得ると思います

if(${USE_OPENGL}) 
    FILE(GLOB ....) 
endif() 

内に置くことができます。

+2

GLOBの使用はおそらく、プロジェクトにとって重要なファイルが見つからない場合はエラーにはならないので、おそらく最良のアイデアはありません。すべてのファイルを手動でリストすると(私が知っている多くのタイピング)、リストされたファイルが見つからないとCMakeは文句を言うでしょう。 – LiMuBei

+0

ZERO_CHECKを取り除くには、-DCMAKE_SUPPRESS_REGENERATION = 0オプションをcmakeコマンドラインに渡すことができます。 – davidnr

4

私は私が知っているものをお答えします:

ALL_BUILDとZERO_CHECKがへの変更と同期して、あなたのプロジェクトを維持するために使用されていますCMakeFiles。私はそれらを取り除く方法がないと思う。

.hファイルを取得するには、それらのファイルをソースの一部として含める必要があります。

file(GLOB LocalProjectIncludes "${yourheaderdirectory}/*.h") 

次に、プロジェクトのソースファイルに$ {LocalProjectIncludes}を追加します。 CMakeは彼らがヘッダーであることを理解します。それを構築しようとはしません。あなたが使用することができますVisual Studioでフォルダにグループファイルへ

関連する問題