2012-02-19 30 views
11

私は非常に単純なディレクトリ構造を持っている:CMakeの実行ファイルの場所

Project 
Project/src 
Project/build 

ソースファイルはProject/srcであり、そして私はProject/buildでアウト・オブ・SRCビルドを行います。 cmake ../ ; makeを実行した後、実行可能ファイルをProject/build$ src/Executableと実行できます。つまり、Executablebuild/srcディレクトリに作成されます。

CMakeLists.txtファイルで実行可能ファイルの場所を設定するにはどうすればよいですか?私はcmake.orgにあるいくつかの例を実行しようとしましたが、動作するリンクはこの動作を示していないようです。

私のProject/src/CMakeLists.txtファイルがここにリストされています。


include_directories(${SBSProject_SOURCE_DIR}/src) 
link_directories(${SBSProject_BINARY_DIR}/src) 

set (SBSProject_SOURCES 
    main.cpp 
    ) 

add_executable(TIOBlobs ${SBSProject_SOURCES}) 

トップレベルProject/CMakeLists.txt


cmake_minimum_required (VERSION 2.6) 
project (SBSProject) 

set (CMAKE_CXX_FLAGS "-g3 -Wall -O0") 

add_subdirectory(src) 

答えて

16

あなたは選択肢のカップルを持っています。

実行ファイルのデフォルトの場所を変更するには、CMAKE_RUNTIME_OUTPUT_DIRECTORYを目的の場所に設定します。あなたはProject/CMakeLists.txtadd_subdirectoryコマンドに

set (CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}) 

を追加した場合、実行可能ファイルは、Win32ビルドのためのUnixビルドまたはbuild/<config type>ためProject/buildになってしまいます。詳細については、

cmake --help-property RUNTIME_OUTPUT_DIRECTORY 

このサイズのプロジェクトの別のオプションは、CMakeLists.txtを1つだけ持つことです。 add_subdirectory(src)Project/src/CMakeLists.txtの内容で置き換えると、同じ出力パスを実現できます。

しかし、さらにいくつかの問題があります。

一般的にlink_directoriesを使用しないでください。あなたがlink_directoriesを使用しない場合でも説明については、

cmake --help-command link_directories 

を実行し、それがどのライブラリが${SBSProject_BINARY_DIR}/src

もう一つの問題は、CMAKE_CXX_FLAGSはUnixのビルドに適用されることであるに記載されていますので、おそらくに包まれるべきとは考えにくいのですif (UNIX) ... endif()ブロック。もちろん、Unix以外のものをビルドする予定がない場合、これは問題ではありません。あなたが2.6を使用する必要がない限り

最後に、私は最低でもCMakeの2.8を必要とするお勧めします - CMakeのは、積極的に開発したプロジェクトであり、現在のバージョンは、だから、2.6

Project/CMakeLists.txtのための単一の交換に比べて多くの重要な改善を持っています

cmake_minimum_required (VERSION 2.8) 
project (SBSProject) 

if (UNIX) 
    set (CMAKE_CXX_FLAGS "-g3 -Wall -O0") 
endif() 

include_directories (${SBSProject_SOURCE_DIR}/src) 

set (SBSProject_SOURCES 
    ${SBSProject_SOURCE_DIR}/src/main.cpp 
    ) 

add_executable (TIOBlobs ${SBSProject_SOURCES}) 
2

実行可能ファイルの場所を再配置する別の方法は、set(EXECUTABLE_OUTPUT_PATH Dir_where_executable_program_is_located)

経由です:のようになります。
関連する問題