คำถามติดแท็ก cmake

CMake เป็นเครื่องกำเนิดระบบสร้างข้ามแพลตฟอร์ม มันสร้างไฟล์สำหรับระบบการสร้างเช่น makefiles ดั้งเดิม, นินจาสร้างและไฟล์โครงการสำหรับสภาพแวดล้อมการพัฒนาแบบบูรณาการหลาย

6
วิธีเชื่อมโยงโปรแกรม C ++ กับ Boost โดยใช้ CMake
ไฟล์ CMake ของฉันควรมีลักษณะอย่างไรสำหรับการเชื่อมโยงโปรแกรมของฉันกับไลบรารี Boost ภายใต้ Ubuntu ข้อผิดพลาดที่แสดงระหว่างการทำงานmake: main.cpp:(.text+0x3b): undefined reference to `boost::program_options::options_description::m_default_line_length' ไฟล์หลักนั้นง่ายมาก: #include <boost/program_options/options_description.hpp> #include <boost/program_options/option.hpp> using namespace std; #include <iostream> namespace po = boost::program_options; int main(int argc, char** argv) { po::options_description desc("Allowed options"); desc.add_options() ("help", "produce help message") ; return 0; } ฉันจัดการไปแล้ว บรรทัดเดียวที่ฉันเพิ่มลงในไฟล์ CMake คือ: target_link_libraries( my_target_file …
109 c++  boost  cmake 

11
การใช้ CMake ฉันจะรับเอาต์พุต verbose จาก CTest ได้อย่างไร
ฉันใช้ CMake เพื่อสร้างโครงการของฉัน ฉันได้เพิ่มไบนารีการทดสอบหน่วยซึ่งใช้กรอบการทดสอบหน่วย Boost ไบนารีเดียวนี้มีการทดสอบหน่วยทั้งหมด ฉันได้เพิ่มไบนารีนั้นให้รันโดย CTest: ADD_EXECUTABLE( tftest test-main.cpp ) ENABLE_TESTING() ADD_TEST( UnitTests tftest) แต่เอาต์พุตการสร้างใน Visual Studio จะแสดงเฉพาะผลลัพธ์ของการรัน CTest: Start 1: UnitTests 1/1 Test #1: UnitTests ................***Failed 0.05 sec 0% tests passed, 1 tests failed out of 1 สิ่งนี้ไม่เป็นประโยชน์มากนักเพราะฉันไม่เห็นว่าการทดสอบใดล้มเหลว หากฉันเรียกใช้ ctest ด้วยตนเองจากบรรทัดคำสั่งโดยที่--verboseฉันได้รับผลลัพธ์จากการทดสอบหน่วย Boost ซึ่งจะบอกสิ่งที่ล้มเหลวจริง: 1: Test command: tftest.exe …
109 cmake  ctest 

19
ข้อผิดพลาด CMake ที่ CMakeLists.txt: 30 (โครงการ): ไม่พบ CMAKE_C_COMPILER
ฉันกำลังพยายามสร้างโซลูชัน Visual Studio ด้วย CMake เพื่อรวบรวม aseprite เวอร์ชันล่าสุดและ CMake ให้ฉัน: No CMAKE_C_COMPILER could be found. No CMAKE_CXX_COMPILER could be found. ผมได้ดาวน์โหลดแล้ว GCC และฉันใช้Visual Studio 2015 ฉันกำลังติดตามบทช่วยสอนนี้: https://github.com/aseprite/aseprite/blob/master/INSTALL.md

14
การใช้ส่วนหัวที่คอมไพล์ล่วงหน้าด้วย CMake
ฉันเคยเห็นโพสต์ (เก่า ๆ ) สองสามโพสต์ใน 'net เกี่ยวกับการแฮ็กด้วยกันการสนับสนุนบางส่วนสำหรับส่วนหัวที่รวบรวมไว้ล่วงหน้าใน CMake พวกเขาทั้งหมดดูเหมือนจะทั่วสถานที่และทุกคนมีวิธีการของตัวเอง วิธีที่ดีที่สุดในการทำปัจจุบันคืออะไร?

1
ความแตกต่างระหว่าง CMAKE_CURRENT_SOURCE_DIR และ CMAKE_CURRENT_LIST_DIR
จาก Wiki: CMAKE_CURRENT_SOURCE_DIR นี่คือไดเร็กทอรีที่มีการประมวลผล CMakeLists.txt ในปัจจุบัน CMAKE_CURRENT_LIST_DIR (ตั้งแต่ 2.8.3) นี่คือไดเร็กทอรีของ listfile ที่กำลังดำเนินการอยู่ จากเอกสาร: CMAKE_CURRENT_SOURCE_DIR:พา ธ ไปยังไดเร็กทอรีต้นทางที่กำลังประมวลผล นี่คือเส้นทางแบบเต็มไปยังไดเร็กทอรีต้นทางที่กำลังประมวลผลโดย cmake CMAKE_CURRENT_LIST_DIR:ไดเร็กทอรีแบบเต็มของ listfile ที่กำลังดำเนินการ เมื่อ CMake ดำเนินการกับ listfiles ในโปรเจ็กต์ของคุณตัวแปรนี้จะถูกตั้งค่าเป็นไดเร็กทอรีที่มี listfile ที่กำลังประมวลผลอยู่ (CMAKE_CURRENT_LIST_FILE) อยู่เสมอ ค่ามีขอบเขตแบบไดนามิก เมื่อ CMake เริ่มประมวลผลคำสั่งในไฟล์ต้นฉบับมันจะตั้งค่าตัวแปรนี้เป็นไดเร็กทอรีที่ไฟล์นี้อยู่ เมื่อ CMake เสร็จสิ้นการประมวลผลคำสั่งจากไฟล์ระบบจะคืนค่าก่อนหน้านี้ ดังนั้นค่าของตัวแปรภายในแมโครหรือฟังก์ชันจึงเป็นไดเร็กทอรีของไฟล์ที่เรียกใช้รายการด้านล่างสุดบน call stack ไม่ใช่ไดเร็กทอรีของไฟล์ที่มีมาโครหรือนิยามฟังก์ชัน ตัวแปรเหล่านี้จะมีค่าต่างกันภายใต้สถานการณ์ใด
105 cmake 

4
วิธีการดึงตัวแปรสภาพแวดล้อมผู้ใช้ใน CMake (Windows)
ฉันรู้วิธีดึงตัวแปรสภาพแวดล้อมเครื่องกว้างปกติใน CMAKE โดยใช้ $ENV{EnvironmentVariableName} แต่ฉันไม่สามารถดึงตัวแปรสภาพแวดล้อมเฉพาะผู้ใช้ เป็นไปได้หรือไม่และอย่างไร

4
ฉันจะใช้ CMake ได้อย่างไร?
ฉันพยายามใช้ CMake เพื่อรวบรวม opencv ฉันกำลังอ่านบทช่วยสอนแต่ไม่เข้าใจว่าไฟล์ CMakeLists คืออะไรและเชื่อมต่อกับ gui ของ CMake ได้อย่างไร ยังไม่เข้าใจว่า makefiles คืออะไร CMakeLists เหมือนกันหรือไม่ แล้วไฟล์ไหนที่ฉันเปิดท้ายด้วย visual-studio?
102 c++  visual-studio  cmake 

9
จะคัดลอกไฟล์ DLL ไปไว้ในโฟลเดอร์เดียวกับไฟล์ปฏิบัติการโดยใช้ CMake ได้อย่างไร
เราใช้ CMake เพื่อสร้างไฟล์ Visual Studio ของแหล่งที่มาของเราใน SVN ของเรา ตอนนี้เครื่องมือของฉันต้องการไฟล์ DLL บางไฟล์เพื่อให้อยู่ในโฟลเดอร์เดียวกับไฟล์ปฏิบัติการ ไฟล์ DLL อยู่ในโฟลเดอร์ข้างแหล่งที่มา ฉันจะเปลี่ยนของฉันได้อย่างไรCMakeLists.txtว่าโครงการ Visual Studio ที่สร้างขึ้นจะมีไฟล์ DLL เฉพาะอยู่แล้วในโฟลเดอร์ release / debug หรือจะคัดลอกเมื่อทำการคอมไพล์
100 dll  cmake 

3
วิธีใช้ CMAKE_INSTALL_PREFIX
ฉันต้องการสร้าง Makefile ด้วยเป้าหมายการติดตั้งทำให้การติดตั้งเป็น / usr แทนค่าเริ่มต้น / usr / local สมมติว่าสร้างไดเร็กทอรีในไดเร็กทอรีย่อยต้นทางฉันดำเนินการ: cmake -DCMAKE_INSTALL_PREFIX:PATH=/usr .. CMakeCache.txt ประกอบด้วย: CMAKE_INSTALL_PREFIX:PATH=/usr(ตกลง?) ตอนนี้ฉันดำเนินการ: ทำ ทำการติดตั้ง ไฟล์ทั้งหมดยังคงติดตั้งไว้ใน usr / local เกิดอะไรขึ้น? แก้ไข: ไม่มี CMAKE_INSTALL_PREFIX ในไฟล์โปรเจ็กต์ CMakeLists.txt ใด ๆ ก่อนที่จะเรียกใช้ cmake ฉันลบทุกอย่างออกจากไดเรกทอรีผลลัพธ์ ติดตั้งคำสั่งใน CMakeLists.txt มีลักษณะดังนี้: install(TARGETS mylibrary DESTINATION lib)

1
CMake ใช้อย่างไร? [ปิด]
ปิด . คำถามนี้จะต้องมีมากขึ้นมุ่งเน้น ขณะนี้ยังไม่ยอมรับคำตอบ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้เน้นไปที่ปัญหาเดียวโดยแก้ไขโพสต์นี้เท่านั้น ปิดให้บริการใน3 ปีที่ผ่านมา ปรับปรุงคำถามนี้ เป็นเรื่องยากที่จะได้รับข้อมูลที่เป็นประโยชน์เกี่ยวกับ CMake ในฐานะผู้เริ่มต้น จนถึงตอนนี้ฉันได้เห็นบทแนะนำบางอย่างเกี่ยวกับวิธีตั้งค่าโครงการพื้นฐานหรืออื่น ๆ อย่างไรก็ตามสิ่งเหล่านี้ไม่ได้อธิบายเหตุผลเบื้องหลังสิ่งที่แสดงในนั้นโดยทิ้งช่องว่างไว้มากมายเสมอ การเรียก CMake บน CMakeLists หมายความว่าอย่างไร มันควรจะเรียกว่าหนึ่งครั้งต่อการสร้างต้นไม้หรืออะไร? ฉันจะใช้การตั้งค่าที่แตกต่างกันสำหรับแต่ละบิลด์ได้อย่างไรหากพวกเขาทั้งหมดใช้ไฟล์ CMakeLists.txt เดียวกันจากแหล่งเดียวกัน เหตุใดแต่ละไดเรกทอรีย่อยจึงต้องการไฟล์ CMakeLists ของตัวเอง ควรใช้ CMake บน CMakeLists.txt อื่นที่ไม่ใช่ที่รากของโปรเจ็กต์หรือไม่ ถ้าเป็นเช่นนั้นในกรณีใด อะไรคือความแตกต่างระหว่างการระบุวิธีสร้างไฟล์ปฏิบัติการหรือไลบรารีจากไฟล์ CMakeLists ในไดเร็กทอรีย่อยของตัวเองกับการทำในไฟล์ CMakeLists ที่รากของแหล่งที่มาทั้งหมด ฉันสามารถสร้างโปรเจ็กต์สำหรับ Eclipse และอีกโปรเจ็กต์สำหรับ Visual Studio ได้หรือไม่เพียงแค่เปลี่ยนตัว-Gเลือกเมื่อเรียกใช้ CMake แม้จะใช้อย่างไร? ไม่มีบทช่วยสอนหน้าเอกสารหรือคำถาม / คำตอบใด ๆ …
100 cmake 

1
CMake target_link_libraries Interface Dependencies
ฉันยังใหม่กับ CMake และสับสนเล็กน้อยกับคำหลักtarget_link_libraries()สาธารณะ, ส่วนตัวและอินเตอร์เฟซที่เกี่ยวข้องกับ. เอกสารระบุว่าสามารถใช้เพื่อระบุทั้งการอ้างอิงลิงก์และอินเทอร์เฟซลิงก์ในคำสั่งเดียว การอ้างอิงลิงค์และอินเทอร์เฟซลิงค์หมายถึงอะไร?
99 cmake 

7
วิธีการแยกสตริงในหลายบรรทัดใน CMake?
ฉันมักจะมีนโยบายในโครงการของฉันที่จะไม่สร้างบรรทัดในไฟล์ข้อความที่มีความยาวเกิน 80 บรรทัดดังนั้นจึงสามารถแก้ไขได้อย่างง่ายดายในบรรณาธิการทุกประเภท (คุณรู้ข้อตกลง) แต่ด้วย CMake ฉันพบปัญหาว่าฉันไม่รู้วิธีแยกสตริงง่ายๆออกเป็นหลาย ๆ บรรทัดเพื่อหลีกเลี่ยงเส้นใหญ่เส้นเดียว พิจารณารหัสพื้นฐานนี้: set(MYPROJ_VERSION_MAJOR "1") set(MYPROJ_VERSION_MINOR "0") set(MYPROJ_VERSION_PATCH "0") set(MYPROJ_VERSION_EXTRA "rc1") set(MYPROJ_VERSION "${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_PATCH}-${VERSION_EXTRA}") มันออกจากขีด จำกัด 80 บรรทัดแล้ว ดังนั้นฉันจะแบ่งบรรทัดใน CM ออกเป็นหลายบรรทัดโดยไม่ต้องใช้ verbose (หลายlist(APPEND ...)หรือคล้ายกัน) ได้อย่างไร
98 cmake 

9
วิธีสร้างและติดตั้ง GLFW 3 และใช้ในโครงการ Linux
GLFW3 เมื่อคืนฉันทำงานดึกพยายามสร้างแพ็คเกจ GLFW 3 สำหรับ Linux จากซอร์ส กระบวนการนี้ใช้เวลานานมากโดยรวมประมาณ 3 ชั่วโมงส่วนหนึ่งเป็นเพราะฉันไม่คุ้นเคยกับ CMake และส่วนหนึ่งเป็นเพราะฉันไม่คุ้นเคยกับ GLFW ฉันหวังว่าโพสต์นี้จะช่วยให้คุณรอดพ้นจากความยากลำบากเมื่อวานนี้! ฉันคิดว่าฉันควรจะเขียนสั้น ๆ และหวังว่าจะช่วยชีวิตคุณได้หลายชั่วโมง ... ขอบคุณ "urraka", "b6" และ "niklas" ในช่อง #glfw IRC ทำให้ฉันสามารถใช้ glfw เวอร์ชัน 3.0.1 ได้ ปรากฎว่านี่ไม่ใช่กระบวนการเล็กน้อย (ไม่ใช่สำหรับฉันฉันไม่ใช่ผู้เชี่ยวชาญ) เนื่องจากไม่มีเอกสารเกี่ยวกับ glfw3 บนเว็บมากนักโดยเฉพาะอย่างยิ่งเกี่ยวกับการตั้งค่าด้วย CMake ฉันถูกขอให้แบ่งสิ่งนี้ออกเป็นส่วนคำถามและคำตอบและฉันได้ทำเช่นนั้นและตอนนี้ส่วนคำตอบอยู่ด้านล่าง คุณเป็นผู้ดูแล GLFW หรือเป็นสมาชิกของทีม GLFW หรือไม่? หากผู้ดูแล GLFW3 คนใดเห็นสิ่งนี้แสดงว่าข้อความของฉันถึงพวกเขาโปรดเพิ่มส่วน "การตั้งค่า GLFW3 บน Windows, …

3
ฉันจะบอกให้ CMake เชื่อมโยงในไลบรารีแบบคงที่ในไดเร็กทอรีต้นทางได้อย่างไร
ฉันมีโปรเจ็กต์เล็ก ๆ ที่มี Makefile ซึ่งฉันพยายามจะแปลงเป็น CMake ส่วนใหญ่เพียงเพื่อรับประสบการณ์กับ CMake สำหรับวัตถุประสงค์ของตัวอย่างนี้โครงการมีไฟล์ต้นฉบับ (C ++ แม้ว่าฉันไม่คิดว่าภาษามีความเกี่ยวข้องเป็นพิเศษ) และไฟล์ไลบรารีแบบคงที่ซึ่งฉันได้คัดลอกมาจากที่อื่น สมมติเพื่อประโยชน์ในการโต้แย้งว่าซอร์สโค้ดไปยังไลบรารีไม่พร้อมใช้งาน ฉันมีเพียงไฟล์. a และส่วนหัวที่เกี่ยวข้อง Makefile ทำด้วยมือของฉันมีกฎการสร้างนี้: main: main.o libbingitup.a g++ -o main main.o libbingitup.a ซึ่งใช้งานได้ดี ฉันจะบอกให้ CMake สร้างสิ่งนี้ได้อย่างไร ไม่ใช่ makefile ที่แน่นอน แต่เป็นสิ่งที่มีคำสั่งเชื่อมโยงที่เทียบเท่า ฉันได้ลองวิธีที่ชัดเจน แต่ไร้เดียงสาเช่น add_executable(main main.cpp libbingitup.a) หรือ add_executable(main main.cpp) target_link_libraries(main libbingitup.a) ตลอดจนสิ่งต่างๆที่มีlink_directories(.)หรือadd_library(bingitup STATIC IMPORTED)อื่น ๆ แต่ยังไม่มีอะไรที่ส่งผลให้การเชื่อมโยงประสบความสำเร็จ …

8
การใช้ CMake เพื่อสร้างไฟล์โครงการ Visual Studio C ++
ฉันกำลังทำงานกับโปรเจ็กต์ C ++ โอเพ่นซอร์สสำหรับโค้ดที่คอมไพล์บน Linux และ Windows ฉันใช้ CMake เพื่อสร้างโค้ดบน Linux เพื่อความสะดวกในการตั้งค่าการพัฒนาและเหตุผลทางการเมืองฉันต้องยึดติดกับไฟล์ / ตัวแก้ไขโครงการ Visual Studio บน Windows (เช่นฉันไม่สามารถเปลี่ยนเป็นCode :: Blocksได้) ผมเห็นคำแนะนำในการสร้างไฟล์ Visual Studio ใช้ CMake เป็นที่นี่ คุณเคยใช้ CMake เพื่อสร้างไฟล์ Visual Studio มาก่อนหรือไม่? ประสบการณ์ของคุณเป็นอย่างไรบ้าง? สมมติว่าฉันต้องการเพิ่มไฟล์ใหม่ในโปรเจ็กต์ของฉัน ขั้นตอนการทำงานสำหรับสิ่งนี้คืออะไร?

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.