ไม่สามารถตั้งค่าชุดเครื่องมือเป็น v140_clang_3_7 ใหม่ใน Visual Studio 2015 Update 1 CMake

ฉันเพิ่งดาวน์โหลด Visual Studio Update 1 ใหม่ และกำลังพยายามให้ CMake สร้างชุดเครื่องมือแพลตฟอร์มที่ถูกต้อง

สิ่งใหม่ในการอัปเดต 1 มีชุดเครื่องมือใหม่: Clang 3.7 พร้อม Microsoft CodeGen ป้อนคำอธิบายรูปภาพที่นี่

ค่อนข้างน่าตื่นเต้นฮะ!

อย่างไรก็ตาม ฉันกำลังพยายามให้ CMake สร้างชุดเครื่องมือที่ถูกต้องที่นี่

ข้อสันนิษฐานที่ 1: ชื่อของชุดเครื่องมือที่ CMake จะยอมรับคือ 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 ฉันถือว่าสิ่งนี้เพราะนั่นคือสิ่งที่อยู่ในวงเล็บ และนั่นคือสิ่งที่ใช้ในชุดเครื่องมืออื่น เช่น v120 เป็นต้น

ดังนั้นฉันจึงตั้งค่ากรณีทดสอบง่ายๆ:

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>

ต่อไป ฉันรัน CMake ด้วยอาร์กิวเมนต์ที่ถูกต้อง:

สมมติฐานที่ 2: ฉันมีข้อโต้แย้งที่ถูกต้อง

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>

พูดว่าอะไรนะ! ไม่พบ CMAKE_C_COMPILER หรือ CMAKE_CXX_COMPILER

ดังนั้นมันจึงไม่ได้ผล มาดูกัน อาจเป็นเพราะ -T ทำงานไม่ถูกต้อง มาทดสอบด้วย 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>

ป้อนคำอธิบายรูปภาพที่นี่

ทำงานเหมือนทารกแรกเกิด อืม.

เอาล่ะเพื่อนๆ แล้วไงต่อ?


person Russell Greene    schedule 01.12.2015    source แหล่งที่มา
comment
คุณแน่ใจหรือว่า CMake รองรับ toolchain ใหม่แล้ว? คุณมี CMake เวอร์ชันล่าสุดหรือไม่? คุณได้ลองใช้จาก Git หรือไม่?   -  person usr1234567    schedule 01.12.2015
comment
@ usr1234567 ฉันคงไร้เดียงสามาก คิดว่า CMake เป็นกล่องดำวิเศษ แค่สร้างเวทมนตร์ขึ้นมา ฉันจะต้องลอง CMake รุ่นใหม่ แต่อาจจะในอีกไม่กี่สัปดาห์ มันเพิ่งออกมาเมื่อวานนี้   -  person Russell Greene    schedule 01.12.2015
comment
ทำไมไม่ได้ตอนนี้? โดยปกติแล้วเวอร์ชัน CMake จะเป็นการบันทึกเพื่ออัปเดต และหากคุณประสบปัญหา คุณก็สามารถติดตั้งเวอร์ชันเก่าอีกครั้งได้ จริงๆ แล้วเวอร์ชันเก่าของคุณอาจใช้ toolchain ใหม่ได้ ฉันยังไม่ได้ตรวจสอบคอมมิต Git หรือซอร์สโค้ดเอง   -  person usr1234567    schedule 01.12.2015
comment
ดูเหมือนว่า CMake จะต้องสร้างไฟล์ MSBuild ที่แตกต่างกันเล็กน้อย หรือที่เรียกว่า vcxproj สำหรับ PlatformToolset v140_Clang_3_7 ตัวอย่างเช่น สำหรับคอมไพล์ C1 ปกติ จะเพิ่ม ‹ObjectFileName›$(IntDir)‹/ObjectFileName› สมมุติว่า C1 รู้ว่านี่คือไดเร็กทอรีและเพิ่มชื่อไฟล์อ็อบเจ็กต์ แต่เสียงดังกราวไม่ได้เป็นเช่นนั้น ดังนั้นคุณจึงต้องใช้ ‹ObjectFileName›$(IntDir)%(filename).obj‹/ObjectFileName› จริงๆ ยิ่งไปกว่านั้นคือ CMake จะไม่เพิ่มองค์ประกอบ ‹ObjectFileName› เนื่องจาก MSBuild ทำสิ่งที่ถูกต้องอยู่แล้ว   -  person goneskiing    schedule 01.12.2015
comment
เพื่อเพิ่มความคิดเห็นก่อนหน้าของฉัน CMake มีนิสัยที่ไม่ดีในการตั้งค่าสิ่งต่าง ๆ อย่างชัดเจนเมื่อ MSBuild จะทำสิ่งที่ถูกต้องและอาจดีกว่าโดยค่าเริ่มต้น โปรดทราบว่านี่จะไม่แก้ปัญหาของคุณ ฉันสงสัยว่า Cmake มีรายการชุดเครื่องมือแบบฮาร์ดโค้ดและจำเป็นต้องขยายออกไป เพียงแต่ว่าแม้จะเป็นเรื่องอื่นก็ต้องแก้ไขเช่นกัน   -  person goneskiing    schedule 01.12.2015
comment
คุณไม่จำเป็นต้องมี clang และ clang++ ใน PATH ใช่ไหม   -  person arrowd    schedule 01.12.2015
comment
ดูเหมือนว่าควรทำที่ไหนสักแห่งแถวนี้: github.com/Kitware/ CMake/blob/master/Source/   -  person Jean-Michaël Celerier    schedule 05.12.2015
comment
ฉันขุดคุ้ยที่นั่นมาระยะหนึ่งแล้ว แต่ก็ไม่ประสบความสำเร็จ ไม่รู้ว่าจะเกิดอะไรขึ้นต่อไป   -  person Russell Greene    schedule 05.12.2015


คำตอบ (1)


ฉันได้ตรวจสอบเรื่องนี้แล้วและมันก็ไม่ได้ดูแย่เกินไป ฉันได้เผยแพร่ ต้นแบบ ตัวแรกที่สามารถคอมไพล์โปรแกรมง่ายๆ ได้จริงๆ

ฉันจะแก้ไขปัญหาต่างๆ ต่อไป แต่หวังว่านี่จะเป็นจุดเริ่มต้นในการหางานที่เหลือที่จำเป็น

มีสองวิธีในการเรียกเสียงดังกราว

ประการแรกคือการระบุชุดเครื่องมือจากบรรทัดคำสั่ง

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

อย่างที่สองคือการตั้งค่าคุณสมบัติเป้าหมายบนโปรเจ็กต์เพื่อให้คุณสมบัตินั้นใช้ Clang toolchain โดยเฉพาะ

set_property(TARGET ${project} PROPERTY VS_PLATFORM_TOOLSET_OVERRIDE "v140_clang_3_7") 
person Gilles Khouzam    schedule 26.01.2016
comment
สุดยอด. มีความคิดบ้างไหมว่าเมื่อไรสิ่งนี้จะถูกผลักต้นน้ำ? - person goneskiing; 04.02.2016