2017-07-14 9 views
0

次のように私は私のソースコードのディレクトリ構造を持つ午前のために働いていないビルド:cmakeのは、ネストされたソースディレクトリ

. 
├── build 
├── CMakeLists.txt 
├── libs 
│   ├── CMakeLists.txt 
│   ├── ext 
│   │   └── include 
│   │    └── json.hpp 
│   └── int 
│    ├── CMakeLists.txt 
│    └── net 
│     ├── CMakeFiles 
│     │   ├── CMakeDirectoryInformation.cmake 
│     │   └── progress.marks 
│     ├── cmake_install.cmake 
│     ├── CMakeLists.txt 
│     ├── include 
│     │   ├── connection.hpp 
│     │   └── conn_manager.hpp 
│     ├── Makefile 
│     └── src 
│      ├── CMakeFiles 
│      │   ├── CMakeDirectoryInformation.cmake 
│      │   ├── libs.dir 
│      │   │   ├── build.make 
│      │   │   ├── cmake_clean.cmake 
│      │   │   ├── cmake_clean_target.cmake 
│      │   │   ├── DependInfo.cmake 
│      │   │   ├── depend.make 
│      │   │   ├── flags.make 
│      │   │   ├── link.txt 
│      │   │   └── progress.make 
│      │   └── progress.marks 
│      ├── cmake_install.cmake 
│      ├── CMakeLists.txt 
│      ├── connection.cpp 
│      ├── conn_manager.cpp 
│      └── Makefile 
└── main 
    ├── CMakeLists.txt 
    ├── config 
    │   └── config.json 
    └── srcs 
     ├── CMakeLists.txt 
     ├── main.cpp 
     ├── samvaadak.cpp 
     └── samvaadak.hpp 

「構築」は、私はcmakeのを実行していたからフォルダです。ビルド/ dist/bin内で実行可能な最終出力を実行して作成します。しかし、ソースツリー(libsとmain)の中間に多くの中間を作り、それを混乱させます。

最上位CMakeLists.txtファイルは次のようになります。

subdirs(src) 

そして、ソースファイルが存在している内側のフォルダ(複数可)のためのCMakeLists.txtファイルは、このようなものです::

project (samvaadak) 
subdirs(main libs) 
set (CMAKE_CXX_STANDARD 11) 
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/dist/lib) 
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/dist/lib) 
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/dist/bin) 

中間CMakeLists.txtファイルは、以下の内容を持っている

LIBSメインフォルダとちょうど釜の外側で構築cmakeのを伝えるためにどのように
include_directories(${samvaadak_SOURCE_DIR}/libs/int/net/include) 
include_directories(${samvaadak_SOURCE_DIR}/libs/ext/include) 
add_library(nettu conn_manager.cpp connection.cpp) 

set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/dist/lib) 
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/dist/lib) 
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/dist/bin) 

ビルドの中のすべて?あなたがソースに無効にすることができ

+1

アウトソースビルドCMake ** never **は、スクリプトが明示的にそれを要求しない限り、ソースディレクトリ内のファイルを生成しません。ソースディレクトリでCMakeによって生成されたファイルを削除して、やり直してください。 '中間CMakeLists.txtファイルには次の内容があります: 'subdirs(src)'' - あなたの 'lib'ディレクトリに' src'サブディレクトリがありません。注意:[subdirs](https://cmake.org/cmake/help/v3.7/command/subdirs.html)コマンドは省略されていますので、[add_subdirectory](https://cmake.org/cmake/help/)を使用してください。 v3.7/command/add_subdirectory.html)を参照してください。 – Tsyvarev

答えて

0

ビルド:

set(CMAKE_DISABLE_IN_SOURCE_BUILD ON) 

もお勧め:

set(CMAKE_DISABLE_SOURCE_CHANGES ON) 

は、彼らが最初にproject()コマンドの前に使用する必要があります。

関連する問題