it-swarm-id.com

Bagaimana cara membuat output CMake menjadi direktori 'bin'?

Saat ini saya sedang membangun sebuah proyek dengan struktur plugin. Saya menggunakan CMake untuk mengkompilasi proyek. Plugin dikompilasi dalam direktori terpisah. Masalah saya adalah bahwa CMake mengkompilasi dan menyimpan binari dan plugin, pustaka dinamis, dalam struktur direktori sumber. Bagaimana cara membuat CMake menyimpan file dalam sesuatu seperti direktori ./bin ?

134

Seperti dalam jawaban Oleg, saya percaya variabel yang benar untuk ditetapkan adalah CMAKE_RUNTIME_OUTPUT_DIRECTORY . Kami menggunakan yang berikut ini di root CMakeLists.txt kami:

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)

Anda juga dapat menentukan direktori keluaran berdasarkan per target:

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"
)

Dalam kedua kasus Anda dapat menambahkan _[CONFIG] ke variabel/nama properti untuk membuat direktori output berlaku untuk konfigurasi tertentu (nilai standar untuk konfigurasi adalah DEBUG, RELEASE, MINSIZEREL dan RELWITHDEBINFO).

234
Adam Bowen

Gunakan set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "/some/full/path/to/bin")

25
Oleg

Gunakan EXECUTABLE_OUTPUT_PATH CMake variabel untuk mengatur jalur yang diperlukan. Untuk detail, lihat dokumentasi CMake online:

Dokumentasi CMake 2.8.8

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

Bagi saya saya menggunakan cmake 3.5, di bawah ini (set variable) tidak berfungsi:

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/"
)

tetapi ini berhasil (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

Terlepas dari apakah saya mendefinisikan ini di CMakeLists.txt utama atau yang individual, masih menganggap saya ingin semua lib dan sampah dari jalur utama, yang merupakan asumsi yang paling tidak berguna dari semua.

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

Bahasa Inggris bukan bahasa ibu saya; mohon alasan kesalahan pengetikan.

gunakan konfigurasi baris ini:
set(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/build/)
tempatkan proyek CMakeLists.txt Anda.
$ {PROJECT_SOURCE_DIR} ini adalah direktori sumber Anda saat ini tempat proyek.
dan jika berkeliaran mengapa $ {EXECUTABLE_OUTPUT_PATH}
periksa file ini CMakeCache.txt lalu cari kata kunci output path,
semua variabel yang didefinisikan di sini, itu akan memberikan penjelasan lengkap tentang proyek semua setting·

0
jdir.s