การใช้ makefile โลคัลสำหรับ CLion แทน CMake


148

มีวิธีการกำหนดค่า CLion ให้ใช้ localfile เพื่อรวบรวมรหัสแทนที่จะเป็น CMake หรือไม่? ฉันไม่สามารถหาวิธีที่จะทำได้จากตัวเลือกการสร้าง

คำตอบ:


142

อัปเดต:หากคุณใช้ CLion 2020.2 แสดงว่ารองรับไฟล์ Makefiles แล้ว หากคุณใช้เวอร์ชั่นที่เก่ากว่าอ่านต่อ


แม้ว่าปัจจุบันรองรับเฉพาะ CMake เท่านั้นคุณสามารถสั่งให้ CMake โทรmakeด้วยกำหนดเองของคุณMakefileได้ แก้ไขCMakeLists.txtการเพิ่มหนึ่งในสองคำสั่งเหล่านี้:

เมื่อคุณบอกCLionให้รันโปรแกรมของคุณมันจะพยายามค้นหาไฟล์ที่รันได้ด้วยชื่อเดียวกันของเป้าหมายในไดเรกทอรีที่ชี้PROJECT_BINARY_DIRไป ดังนั้นตราบใดที่คุณmakeสร้างไฟล์ตามที่CLionคาดหวังก็จะไม่มีปัญหา

นี่คือตัวอย่างการทำงาน:

บอกCLionให้ส่ง $ (PROJECT_BINARY_DIR) ไปที่make

นี่คือตัวอย่างCMakeLists.txt:

cmake_minimum_required(VERSION 2.8.4)
project(mytest)

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")

add_custom_target(mytest COMMAND make -C ${mytest_SOURCE_DIR}
                         CLION_EXE_DIR=${PROJECT_BINARY_DIR})

บอก make เพื่อสร้างไฟล์เรียกทำงานในCLion'sไดเร็กทอรี

นี่คือตัวอย่างMakefile:

all:
    echo Compiling $(CLION_EXE_DIR)/$@ ...
    g++ mytest.cpp -o $(CLION_EXE_DIR)/mytest

นั่นคือทั้งหมดที่คุณอาจต้องการที่จะเปลี่ยนไดเรกทอรีการทำงานของโปรแกรมของคุณเพื่อที่จะดำเนินการเช่นเดียวกับเมื่อคุณเรียกใช้ทำจากภายในไดเรกทอรีของคุณ สำหรับการแก้ไขนี้:Run -> Edit Configurations ... -> mytest -> Working directory


ฉันยังไม่ได้ลองคำแนะนำข้างต้นของคุณ แต่ฉันจะสามารถใช้งานโปรแกรม C / C ++ ใน CLion ได้หรือไม่? (สิ่งนี้จะทำให้กระบวนการดีบักง่ายขึ้นเป็นตัน)
hlin117

3
ฉันยืนยันว่าโซลูชันของ @ Mondkin ใช้งานได้ หากคุณมีปัญหาในการสร้างโครงการหลังจากแก้ไขMakefileและCMakeLists.txtลองแก้ไข*.cppไฟล์ นี่จะทำให้ CLion สร้างทุกอย่างตั้งแต่เริ่มต้น
hlin117

ใช้งานได้ แต่เมื่อฉันพยายามเพิ่ม "ทำความสะอาด" ให้กับการกำหนดค่าล้มเหลว
71GA

1
FYI เพื่อให้การทำงานนี้อย่างน้อยในบางโครงการ (เช่น redis) คุณต้องเพิ่ม 'ทั้งหมด' ทำให้: add_custom_target (mytest ALL COMMAND ทำ -C $ {mytest_SOURCE_DIR} CLION_EXE_DIR = $ {PROJECT_BINARY_DIR} )
Decker

1
ฉันควรเปลี่ยนเพื่อให้ทำงานกับ gcc สำหรับ C
Romain-p

33

แม้ว่านี่จะเป็นหนึ่งในคำขอคุณลักษณะที่ได้รับการโหวตมากที่สุดแต่Victor Kroppมีปลั๊กอินหนึ่งรายการที่พร้อมรองรับการสร้างไฟล์ makefiles:

ปลั๊กอินสนับสนุน Makefile สำหรับ IntelliJ IDEA

ติดตั้ง

คุณสามารถติดตั้งได้โดยตรงจากที่เก็บอย่างเป็นทางการ:

การตั้งค่า> ปลั๊กอิน> ค้นหาmakefile> ค้นหาในที่เก็บ> ติดตั้ง> รีสตาร์ท

ใช้

มีวิธีการเรียกใช้อย่างน้อยสามวิธี:

  1. คลิกขวาที่ makefile แล้วเลือกRun
  2. เปิด makefile ไว้ในตัวแก้ไขวางเคอร์เซอร์ไว้ที่หนึ่งเป้าหมาย (ที่ใดก็ได้บนบรรทัด) กดalt+ enterจากนั้นเลือกทำให้เป้าหมาย
  3. กดปุ่มctrl/ cmd+ shift+ F10บนเป้าหมาย (แม้ว่าอันนี้จะไม่ได้ผลสำหรับฉันใน mac)

จะเปิดบานหน้าต่างชื่อRun เป้าหมายด้วยการส่งออก


2
เพียงแค่ Headsup ถ้าคุณไปเส้นทางนี้ให้แน่ใจว่าคุณเข้าสู่ settings-> สร้างและตรวจสอบให้แน่ใจว่าคุณชี้ปลั๊กอินไปยังไดเรกทอรีการติดตั้งของ make โดยค่าเริ่มต้นจะมีลักษณะเป็น / usr / bin / make
Taylor Liss

5
ฉันลองใช้วิธีการของคุณแล้ว แต่นี่เป็นเพียงโอกาสในการสร้างโครงการของคุณใช่ไหม ฉันไม่สามารถเรียกใช้แอปพลิเคชันที่สร้างขึ้นด้วยปลั๊กอินนี้หรือฉันจะพลาดบางอย่าง ฉันมีโครงการที่มี Makefile ค่อนข้างซับซ้อนและฉันไม่ต้องการเขียนไฟล์ CMake สำหรับมัน แต่ฉันต้องการดีบักโดยใช้ CLion ...
blacktemplar

@blacktemplar ฉันไม่รู้ว่าคุณสามารถใช้เครื่องมือดีบักทั้งหมดจาก CLion ได้หรือไม่ แต่ฉันควรจะสามารถคอมไพล์และดีบักไฟล์ไบนารีที่สร้างด้วยวิธีการข้างต้น ฉันเพิ่งเล่นไปนิดหน่อยและฉันก็สามารถใช้ปุ่มควบคุมขั้นตอนได้เช่นกัน
ILED

2
สำหรับการกำหนดค่าที่ซับซ้อนยิ่งขึ้นนี่เป็นคำตอบที่ง่ายกว่ามาก การแก้ไข makefile เพียงเพื่อให้ makefile นั้นเป็นบ้า!
เควิน

1
คุณเรียกใช้ไบนารีที่สร้างขึ้นใน clion ได้อย่างไร ฉันสร้างการกำหนดค่าใหม่สำหรับแอปพลิเคชันจากนั้นเป้าหมาย: เป้าหมายทั้งหมด, ปฏิบัติได้: ชื่อของไบนารี แต่ฉันได้รับข้อผิดพลาดนี้: "ไม่สามารถทำงานbinaryบน <default>"
Kennet Celeste

7

เวอร์ชั่นใหม่ล่าสุดมีการรองรับที่ดีกว่าสำหรับ Makefiles ที่สร้างขึ้นผ่านทางคอมไพล์

สามขั้นตอน:

  1. ติดตั้ง compiledb

    pip install compiledb
    
  2. เรียกใช้ให้แห้ง

    compiledb -n make 
    

    (ทำ autogen กำหนดค่าหากจำเป็น)

  3. จะมีไฟล์ compile_commands.json ที่สร้างขึ้นเปิดโครงการและคุณจะเห็น CLion จะโหลดข้อมูลจากไฟล์ json หาก CLion ของคุณยังคงพยายามค้นหา CMakeLists.txt และไม่สามารถอ่าน compile_commands.json ให้ลองลบโฟลเดอร์ทั้งหมดดาวน์โหลดไฟล์ต้นฉบับอีกครั้งและทำซ้ำขั้นตอนที่ 1,2,3

โพสต์ดั้งเดิม : การทำงานกับ Makefiles ใน CLion โดยใช้ Compilation DB


1
Nice Jetbrains กำลังทำงานปัญหา แต่ตั้งแต่วันที่ 16 พฤศจิกายน 2018 มันไม่มีประโยชน์เพราะคุณไม่สามารถดีบักไฟล์เรียกทำงานที่สร้างขึ้นได้
gerardw

3

ในการหลีกเลี่ยงการใช้ CMAKE ทั้งหมดคุณสามารถ:

  1. สร้างโครงการของคุณตามปกติด้วย Make ผ่านเทอร์มินัล

  2. เปลี่ยนการกำหนดค่า CLion ของคุณไปที่ (ในแถบด้านบน):
    Run -> Edit Configurations -> yourProjectFolder

  3. เปลี่ยนเป็นExecutableสิ่งที่สร้างด้วย Make

  4. เปลี่ยนเป็นWorking directoryโฟลเดอร์ที่เก็บไฟล์เรียกทำงานของคุณ (ถ้าจำเป็น)

  5. ลบBuildงานในBefore launch:Activate tool windowกล่อง

และคุณพร้อมแล้ว! ตอนนี้คุณสามารถใช้ปุ่มดีบั๊กหลังจากสร้างคู่มือของคุณแล้ว


1
การกำหนดค่าของฉันในขณะที่คุณอธิบายมันบอกว่า "ไม่มีอะไรที่จะสร้าง" แม้ว่าจะมีการตั้งค่าปฏิบัติการและมีอยู่
ลา

ถูกต้องแล้ว. คุณควรสร้างด้วยตนเองแล้วเรียกใช้ (โดยไม่ต้องสร้าง) โปรดทราบว่า CLion เวอร์ชันใหม่ล่าสุดดูเหมือนว่าจะรองรับ MakeFiles ได้ดียิ่งขึ้น วิธีการแก้ปัญหานี้ยังคงใช้งานได้ แต่ฉันจะถือว่าเป็นค่าใช้จ่าย
13013SwagR

คุณอยากแนะนำอะไรให้เป็นเวอร์ชั่นล่าสุด ฉันมีปลั๊กอิน makefile แต่มันไม่ได้จัดการกับการรวบรวม / การดีบัก
ลา

คุณควรจะสามารถรวบรวมและฉันคาดเดาการดีบั๊กเช่นกันกับปลั๊กอิน Makefile ดูClion Doc . แม้ว่าฉันจะแนะนำให้คุณใช้ CMake ซึ่งได้รับการสนับสนุนอย่างเต็มที่และหลีกเลี่ยงปัญหาทั้งหมด คุณสามารถตั้งค่า (ฉันคิดว่า) ด้วยเทมเพลตดีบั๊กระยะไกลหรือใช้ GDB โดยตรงในคอนโซล
13013SwagR

1

ขณะนี้ CLion รองรับ CMake เท่านั้น ระบบการสร้างอื่น ๆ จะถูกเพิ่มในอนาคต แต่ปัจจุบันคุณสามารถใช้ CMake ได้เท่านั้น

มีการนำเครื่องมือนำเข้ามาใช้เพื่อช่วยให้คุณใช้ CMake

แก้ไข:

ที่มา: http://blog.jetbrains.com/clion/2014/09/clion-answers-frequently-asked-questions/


เห็นว่าโพสต์นี้ได้ออกไปหนึ่งเดือนแล้วและนี่คือการตอบกลับเพียงอย่างเดียวฉันเชื่อว่าคุณถูกต้องขออภัย ...
hlin117

ขุดลึกลงไปในแหล่งที่มาของความคิดเห็นที่ฉันพบนี้: youtrack.jetbrains.com/issue/CPP-494#tab=Comments
hlin117

ถ้าคุณไม่ต้องการใช้ cmake ล่ะ
Enerccio

1

ฉันไม่คุ้นเคยกับ CMake มากและไม่สามารถใช้โซลูชันของ Mondkin ได้โดยตรง

นี่คือสิ่งที่ฉันคิดใน CMakeLists.txt โดยใช้ CLion (1.2.4) รุ่นล่าสุดและ MinGW บน Windows (ฉันเดาว่าคุณจะต้องแทนที่ทั้งหมด: g ++ mytest.cpp -o bin / mytest โดยทำตาม คุณไม่ได้ใช้การตั้งค่าเดียวกัน):

cmake_minimum_required(VERSION 3.3)
project(mytest)

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")

add_custom_target(mytest ALL COMMAND mingw32-make WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR})

และ Makefile แบบกำหนดเองก็เป็นเช่นนี้ (อยู่ที่รูทของโปรเจ็กต์ของฉันและสร้างไฟล์เรียกทำงานในไดเร็กทอรี bin):

all:
    g++ mytest.cpp -o bin/mytest

ฉันสามารถสร้างแฟ้มที่ปฏิบัติการได้และข้อผิดพลาดในหน้าต่างบันทึกนั้นสามารถคลิกได้

คำแนะนำใน IDE ค่อนข้าง จำกัด ซึ่งเป็นข้อ จำกัด ที่ยิ่งใหญ่เมื่อเทียบกับโครงการ CMake ล้วนๆ ...


สิ่งนี้ใช้ได้สำหรับฉัน ฉันสามารถรับ CLion ให้รู้จักไฟล์ต้นฉบับของฉันว่า "แอ็คทีฟ" โดยรวมไฟล์เหล่านั้นไว้ในของฉันset(SOURCE_FILES all_files_here.c)แล้วเพิ่มadd_executable(foobar_cmake ${SOURCE_FILES})เข้าไปนอกเหนือจากเป้าหมายที่กำหนดเอง จากนั้นตรวจสอบให้แน่ใจว่า CLion ได้รับการตั้งค่าให้สร้าง / เรียกใช้เป้าหมายที่กำหนดเองและไม่ใช่ _cmake
Kevin Mark
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.