Ş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?
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
).
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "/some/full/path/to/bin")
kullanın
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:
$ cat CMakeLists.txt
project (hello)
set(EXECUTABLE_OUTPUT_PATH "bin")
add_executable (hello hello.c)
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/"
)
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;.
cat CMakeLists.txt
project (hello)
set(CMAKE_BINARY_DIR "/bin")
set(EXECUTABLE_OUTPUT_PATH ${CMAKE_BINARY_DIR})
add_executable (hello hello.c)
İ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·