2012-02-19 20 views
11

Ben çok basit bir dizin yapısı vardır:CKağıt yürütülebilir konumu

Project 
Project/src 
Project/build 

Kaynak dosyalar Project/src içindedir ve ben Project/build yılında dışı src yapı yok. cmake ../ ; make'u çalıştırdıktan sonra çalıştırılabilir dosyayı şu şekilde çalıştırabilirim: Project/build$ src/Executable - Executablebuild/src dizininde oluşturulur.

Yürütülebilir dosyanın konumunu CMakeLists.txt dosyasında nasıl belirlerim? cmake.org adresinde bulunan bazı örnekleri izlemeyi denedim, ancak çalışan bağlantılar bu davranışı göstermiyor gibi görünüyor.

Benim Project/src/CMakeLists.txt dosya burada listelenmektedir.


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

set (SBSProject_SOURCES 
    main.cpp 
    ) 

add_executable(TIOBlobs ${SBSProject_SOURCES}) 

ve üst düzey Project/CMakeLists.txt:


cmake_minimum_required (VERSION 2.6) 
project (SBSProject) 

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

add_subdirectory(src) 

cevap

16

Sen seçimler bir çift var.

Yürütülebilir dosyaların varsayılan konumunu değiştirmek için, istenen konuma CMAKE_RUNTIME_OUTPUT_DIRECTORY değerini ayarlayın. Win32 inşa için Örneğin, size Project/CMakeLists.txt önce add_subdirectory komuta

set (CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}) 

eklerseniz, sizin yürütülebilir Unix kurar için Project/build sona veya build/<config type> olacaktır. Daha fazla ayrıntı için çalıştırın:

cmake --help-property RUNTIME_OUTPUT_DIRECTORY 

bu büyüklükte bir proje için bir başka seçenek sadece bir CMakeLists.txt sahip olmaktır. Aynı çıkış yollarını elde etmek için Project/src/CMakeLists.txt'un içeriğiyle add_subdirectory(src)'un yerini daha fazla veya daha az değiştirebilirsiniz. Bununla birlikte, birkaç başka konu daha vardır.

Genelde link_directories'u kullanmaktan kaçınmak isteyebilirsiniz. Eğer link_directories kullanmak bile açıklama için,

cmake --help-command link_directories 

çalıştırmak, herhangi bir kütüphaneler ${SBSProject_BINARY_DIR}/src

diğer konu CMAKE_CXX_FLAGS Unix inşa için geçerli olmasıdır bulunabilir, bu nedenle muhtemelen sarılmış gerektiğini düşüktür Bir if (UNIX) ... endif() bloğu. Elbette, Unix'ten başka bir şey üzerinde plan yapmayı düşünmüyorsanız, bu bir sorun değil. Eğer 2.6 kullanmak zorunda olmadıkça

Son olarak, asgari olarak CMake 2.8 gerektiren öneriyoruz - CKağıt aktif olarak geliştirilen bir projedir ve güncel sürümü Yani 2.6

Project/CMakeLists.txt için tek yedek boyunca birçok önemli iyileştirmeler vardır görünebilir gibi:

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

çalıştırılabilir dosya konumu taşındıktan bir başka yoludur set(EXECUTABLE_OUTPUT_PATH Dir_where_executable_program_is_located)

aracılığıyla