2017-07-14 66 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運行一個文件夾。它運行並在build/dist/bin中創建最終的輸出可執行文件。但它也會在源代碼樹(libs和main)內部創建大量中間件,並使其變得混亂。

頂層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文件具有以下內容:

subdirs(src) 

而且,對於內夾(S),其中源文件存在於文件的CMakeLists.txt,是這樣的:

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) 

如何判斷建立的主要文件夾和外cmake的只是BUIL d內部構建的一切?

+1

使用源代碼構建CMake **從不**在源代碼目錄中生成任何文件,除非腳本明確要求。刪除源代碼中由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()命令之前使用。

相關問題