it-swarm.asia

CMake çıktısını 'bin' dir içine nasıl yaparım?

Şu anda bir eklenti yapısına sahip bir proje yapıyorum. Projeyi derlemek için CMake kullanıyorum. Eklentiler ayrı dizinlerde derlenmiştir. Benim sorunum, CMake'nin ikili dizinleri ve eklentileri, dinamik kütüphaneleri kaynağın dizin yapısında toplaması ve kaydetmesidir. CMake'in bir ./bin dizini gibi bir dosyadaki dosyaları kaydetmesini nasıl sağlayabilirim?

134

Oleg'in cevabında olduğu gibi, ayarlanacak doğru değişkenin CMAKE_RUNTIME_OUTPUT_DIRECTORY olduğuna inanıyorum. Kök CMakeLists.txt dosyasında aşağıdakileri kullanıyoruz:

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

Ayrıca çıktı dizinlerini hedef başına bazda belirleyebilirsiniz:

set_target_properties( targets...
    PROPERTIES
    ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/lib"
    LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/lib"
    RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin"
)

Her iki durumda da, çıktı dizininin belirli bir yapılandırmaya uygulanmasını sağlamak için değişken/özellik adına _[CONFIG] ekleyebilirsiniz (yapılandırma için standart değerler DEBUG, RELEASE, MINSIZEREL ve RELWITHDEBINFO).

234
Adam Bowen

set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "/some/full/path/to/bin") kullanın

25
Oleg

Gerekli yolu ayarlamak için EXECUTABLE_OUTPUT_PATH CMake değişkenini kullanın. Ayrıntılar için çevrimiçi CMake belgelerine bakın:

CMake 2.8.8 Dokümantasyon

6
gtikok
$ cat CMakeLists.txt
project (hello)
set(EXECUTABLE_OUTPUT_PATH "bin")
add_executable (hello hello.c)
3
mcandre

Bana göre cmake 3.5 kullanıyorum, aşağıdaki (set variable) çalışmıyor:

set(
      ARCHIVE_OUTPUT_DIRECTORY "/home/xy/cmake_practice/lib/"
      LIBRARY_OUTPUT_DIRECTORY "/home/xy/cmake_practice/lib/"
      RUNTIME_OUTPUT_DIRECTORY "/home/xy/cmake_practice/bin/"
)

ama bu işe yarıyor (set set_target_properties):

set_target_properties(demo5
    PROPERTIES
    ARCHIVE_OUTPUT_DIRECTORY "/home/xy/cmake_practice/lib/"
    LIBRARY_OUTPUT_DIRECTORY "/home/xy/cmake_practice/lib/"
    RUNTIME_OUTPUT_DIRECTORY "/home/xy/cmake_practice/bin/"
)
1
Jayhello

Bunu ana CMakeLists.txt dosyasında mı yoksa münferit sayfalarda mı tanımladığımdan bağımsız olarak, yine de tüm libleri ve depoları istediğimi varsayarım;.

0
Jerry Miller
cat CMakeLists.txt
project (hello)
set(CMAKE_BINARY_DIR "/bin")
set(EXECUTABLE_OUTPUT_PATH ${CMAKE_BINARY_DIR})
add_executable (hello hello.c)
0
Meet Modia

İngilizce anadilim değil; lütfen yazım hataları için özür dilerim.

bu satırı config kullanın:
set(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/build/)
herhangi bir CMakeLists.txt projenizi yerleştirin.
this $ {PROJECT_SOURCE_DIR}, proje yerinin bulunduğu kaynak dizininizdir.
ve dolaşıyorsanız neden $ {EXECUTABLE_OUTPUT_PATH}
bu dosyayı kontrol edin CMakeCache.txt, sonra anahtar kelimesini arayın output path,
burada tanımlanan tüm değişkenler, projenin tam bir açıklamasını verir setting·

0
jdir.s