Tidak dapat menyetel perangkat ke v140_clang_3_7 baru di Visual Studio 2015 Pembaruan 1 CMake

Jadi saya baru saja mengunduh Pembaruan Visual Studio 1 yang baru dan saya mencoba membuat CMake menghasilkan perangkat platform yang benar.

Baru di Update 1 ada toolset baru: Dentang 3.7 dengan Microsoft CodeGen masukkan deskripsi gambar di sini

Cukup mengasyikkan, ya!

Bagaimanapun, saya mencoba membuat CMake menghasilkan perangkat yang benar di sini.

ASUMSI 1: Nama perangkat yang akan diterima CMake adalah v140_clang

C:\Users\russe\Documents\TestCMAKECLANG>ls
CMakeLists.txt  main.cpp

C:\Users\russe\Documents\TestCMAKECLANG>cat CMakeLists.txt
cmake_minimum_required(VERSION 3.0)


add_executable(TestEXE main.cpp)
C:\Users\russe\Documents\TestCMAKECLANG>cat main.cpp


// use some fancy c++14 feature that VS doesn't have

template<typename T>
constexpr T doThing{};

int main(){}
C:\Users\russe\Documents\TestCMAKECLANG>
7. Saya berasumsi demikian karena itulah yang ada dalam tanda kurung, dan itulah yang digunakan pada perangkat lain, seperti v120 dll.

Jadi saya menyiapkan test case sederhana:

C:\Users\russe\Documents\TestCMAKECLANG>ls
CMakeLists.txt  main.cpp

C:\Users\russe\Documents\TestCMAKECLANG>cat CMakeLists.txt
cmake_minimum_required(VERSION 3.0)


add_executable(TestEXE main.cpp)
C:\Users\russe\Documents\TestCMAKECLANG>cat main.cpp


// use some fancy c++14 feature that VS doesn't have

template<typename T>
constexpr T doThing{};

int main(){}
C:\Users\russe\Documents\TestCMAKECLANG>

Selanjutnya, saya menjalankan CMake dengan argumen yang benar:

ASUMSI 2: Saya memiliki argumen yang benar

C:\Users\russe\Documents\TestCMAKECLANG>cmake -G "Visual Studio 14 2015" -T "v140_clang_3_7"
-- The C compiler identification is unknown
-- The CXX compiler identification is unknown
CMake Error in :
  No CMAKE_C_COMPILER could be found.



CMake Error in :
  No CMAKE_CXX_COMPILER could be found.



-- Configuring incomplete, errors occurred!
See also "C:/Users/russe/Documents/TestCMAKECLANG/CMakeFiles/CMakeOutput.log".
See also "C:/Users/russe/Documents/TestCMAKECLANG/CMakeFiles/CMakeError.log".

C:\Users\russe\Documents\TestCMAKECLANG>

Katakan apa! Tidak ditemukan CMAKE_C_COMPILER atau CMAKE_CXX_COMPILER.

Jadi itu tidak berhasil. Coba lihat, mungkin saja -T tidak berfungsi dengan baik. Mari kita uji dengan v120

C:\Users\russe\Documents\TestCMAKECLANG>cmake -G "Visual Studio 14 2015" -T "v120"
-- The C compiler identification is MSVC 18.0.31010.0
-- The CXX compiler identification is MSVC 18.0.31010.0
-- Check for working C compiler using: Visual Studio 14 2015
-- Check for working C compiler using: Visual Studio 14 2015 -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working CXX compiler using: Visual Studio 14 2015
-- Check for working CXX compiler using: Visual Studio 14 2015 -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Configuring done
-- Generating done
-- Build files have been written to: C:/Users/russe/Documents/TestCMAKECLANG

C:\Users\russe\Documents\TestCMAKECLANG>

masukkan deskripsi gambar di sini

Bekerja seperti bayi yang baru lahir. Hmm.

Baiklah teman-teman, apa selanjutnya?


person Russell Greene    schedule 01.12.2015    source sumber
comment
Apakah Anda yakin CMake sudah mendukung toolchain baru? Apakah Anda memiliki versi CMake terbaru? Apakah Anda mencoba dengan salah satu dari Git?   -  person usr1234567    schedule 01.12.2015
comment
@ usr1234567 Saya pasti sangat naif, berpikir bahwa CMake adalah kotak hitam ajaib, hanya menghasilkan keajaiban. Saya harus mencoba CMake yang lebih baru, tapi mungkin dalam beberapa minggu; itu baru keluar kemarin.   -  person Russell Greene    schedule 01.12.2015
comment
Mengapa tidak sekarang? Biasanya versi CMake disimpan untuk diperbarui. Dan jika Anda mengalami masalah, Anda cukup menginstal ulang versi yang lebih lama. Sebenarnya versi lama Anda mungkin bisa menggunakan toolchain baru. Saya belum memeriksa komitmen Git atau sumber kode itu sendiri.   -  person usr1234567    schedule 01.12.2015
comment
Tampaknya CMake harus membuat file MSBuild, alias vcxproj, yang sedikit berbeda untuk PlatformToolset v140_Clang_3_7. Misalnya untuk kompilasi C1 normal, ia menambahkan ‹ObjectFileName›$(IntDir)‹/ObjectFileName›. Agaknya C1 menyadari ini adalah direktori dan menambahkan nama file objek, dentang tidak sehingga Anda benar-benar membutuhkan ‹ObjectFileName›$(IntDir)%(filename).obj‹/ObjectFileName›. Lebih baik lagi jika CMake tidak menambahkan elemen ‹ObjectFileName› karena MSBuild tetap melakukan hal yang benar.   -  person goneskiing    schedule 01.12.2015
comment
Untuk menambah komentar saya sebelumnya. CMake memiliki kebiasaan buruk dalam mengatur sesuatu secara eksplisit ketika MSBuild akan melakukan hal yang benar, dan mungkin lebih baik, secara default. Perhatikan juga ini tidak akan menyelesaikan masalah Anda, saya kira Cmake memiliki daftar perangkat keras yang dikodekan dan ini perlu diperluas. Hanya saja meskipun demikian, ada hal-hal lain yang perlu diperbaiki juga   -  person goneskiing    schedule 01.12.2015
comment
Bukankah Anda harus memiliki clang dan clang++ di PATH?   -  person arrowd    schedule 01.12.2015
comment
Sepertinya itu harus dilakukan di sekitar sini : github.com/Kitware/ CMake/blob/master/Sumber/   -  person Jean-Michaël Celerier    schedule 05.12.2015
comment
Saya menggali di sana untuk sementara waktu, tetapi tidak berhasil. Entah apa selanjutnya   -  person Russell Greene    schedule 05.12.2015


Jawaban (1)


Saya sudah memeriksanya dan sepertinya tidak terlalu buruk. Saya telah membuat prototipe pertama yang mampu mengkompilasi program yang sangat sederhana.

Saya akan terus berupaya memperbaiki keadaan, namun mudah-mudahan ini bisa menjadi awal untuk mencari tahu sisa pekerjaan yang diperlukan.

Ada dua cara untuk memanggil Dentang.

Yang pertama adalah menentukan toolset dari baris perintah

cmake -G "Visual Studio 14 2015" -T v140_clang_3_7 ... 

Yang kedua adalah menetapkan properti target pada proyek agar proyek tersebut secara khusus menggunakan rantai alat Clang

set_property(TARGET ${project} PROPERTY VS_PLATFORM_TOOLSET_OVERRIDE "v140_clang_3_7") 
person Gilles Khouzam    schedule 26.01.2016
comment
Luar biasa. Adakah yang tahu kapan hal ini akan didorong ke hulu? - person goneskiing; 04.02.2016