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

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

4
การใช้งานคือ find_package () ถ้าคุณต้องการระบุ CMAKE_MODULE_PATH แล้วล่ะ?
ฉันกำลังพยายามทำให้ cross-plattform build system ทำงานโดยใช้ CMake ขณะนี้ซอฟต์แวร์มีการขึ้นต่อกันเล็กน้อย ฉันรวบรวมและติดตั้งในระบบของฉัน ตัวอย่างไฟล์ที่ติดตั้งแล้ว: -- Installing: /usr/local/share/SomeLib/SomeDir/somefile -- Installing: /usr/local/share/SomeLib/SomeDir/someotherfile -- Installing: /usr/local/lib/SomeLib/somesharedlibrary -- Installing: /usr/local/lib/SomeLib/cmake/FindSomeLib.cmake -- Installing: /usr/local/lib/SomeLib/cmake/HelperFile.cmake ตอนนี้ CMake มีfind_package()ที่เปิดFind*.cmakeไฟล์และค้นหาหลังจากห้องสมุดในระบบและกำหนดตัวแปรบางอย่างเช่นSomeLib_FOUNDฯลฯ CMakeLists.txt ของฉันมีอะไรเช่นนี้: set(CMAKE_MODULE_PATH "/usr/local/lib/SomeLib/cmake/;${CMAKE_MODULE_PATH}") find_package(SomeLib REQUIRED) คำสั่งแรกกำหนดที่ CMake ค้นหาหลังจากFind*.cmakeและฉันเพิ่มไดเรกทอรีของSomeLibที่FindSomeLib.cmakeสามารถพบได้จึงfind_package()ทำงานตามที่คาดไว้ แต่นี่เป็นสิ่งที่แปลกเพราะหนึ่งในเหตุผลที่find_package()มีอยู่คือการหลีกเลี่ยงเส้นทางที่มีการเข้ารหัสแบบไม่ข้าม - แพลตฟอร์ม มักจะทำเช่นนี้ได้อย่างไร ฉันควรคัดลอกcmake/ไดเรกทอรีSomeLibไปยังโครงการของฉันและตั้งค่าCMAKE_MODULE_PATHค่อนข้าง
167 cmake 

4
เพิ่มไฟล์ทั้งหมดในโฟลเดอร์ไปยังเป้าหมายโดยอัตโนมัติโดยใช้ CMake หรือไม่
ฉันกำลังพิจารณาเปลี่ยนโครงการข้ามแพลตฟอร์มจากระบบการจัดการการสร้างที่แยกต่างหากใน Visual C ++, XCode และ makefiles เป็น CMake คุณสมบัติที่สำคัญอย่างหนึ่งที่ฉันต้องการคือการเพิ่มไฟล์ทั้งหมดในไดเรกทอรีไปยังเป้าหมายโดยอัตโนมัติ แม้ว่าสิ่งนี้จะง่ายต่อการทำ แต่ก็ไม่สามารถทำได้ด้วย Visual C ++ และ XCode (แก้ไขฉันถ้าฉันผิด) เป็นไปได้ไหมที่จะทำใน CMake โดยตรง อย่างไร?

3
CMake ทำงานอย่างไร
ฉันไม่ได้ขอสิ่งนี้ด้วยตนเอง ฉันหวังว่าคำถามนี้จะเป็นข้อมูลอ้างอิงสำหรับมือใหม่หลายคนที่ชอบฉันพบว่ามันน่างงงวยอย่างมากเกี่ยวกับสิ่งที่เกิดขึ้นเบื้องหลังเมื่อสิ่งเล็ก ๆ น้อย ๆCMakeLists.txtไฟล์ cmake_minimum_required (VERSION 2.6) project(Tutorial) add_executable(Tutorial tutorial.cpp) และเช่นขนาดเล็ก tutorial.cpp int main() { return 0; } มีไฟล์จำนวนมากที่ถูกสร้างขึ้น CMakeCache.txt cmake_install.cmake Makefile CMakeLists.txt tutorial.cpp และCMakeFilesโฟลเดอร์ที่มีไฟล์และโฟลเดอร์มากมาย CMakeCCompiler.cmake CMakeOutput.log Makefile.cmake cmake.check_cache CMakeSystem.cmake progress.marks CMakeCXXCompiler.cmake CMakeTmp TargetDirectories.txt CMakeDetermineCompilerABI_C.bin CompilerIdC Tutorial.dir CMakeDetermineCompilerABI_CXX.bin CompilerIdCXX CMakeDirectoryInformation.cmake Makefile2 ไม่เข้าใจว่าเกิดอะไรขึ้นเบื้องหลัง (เช่น: เหตุใดจึงต้องมีการสร้างไฟล์และวัตถุประสงค์ของพวกเขา) เป็นอุปสรรคที่ใหญ่ที่สุดในการเรียนรู้ CMake ถ้าใครรู้คุณช่วยอธิบายหน่อยได้ไหมเพื่อลูกหลาน? จุดประสงค์ของไฟล์เหล่านี้คืออะไรและเมื่อฉันพิมพ์cmake .สิ่งที่ …
158 cmake 

5
เป็นการดีกว่าที่จะระบุไฟล์ต้นฉบับด้วย GLOB หรือแต่ละไฟล์แยกกันใน CMake?
CMake มีหลายวิธีในการระบุไฟล์ต้นฉบับสำหรับเป้าหมาย หนึ่งคือการใช้ globbing ( เอกสาร ) ตัวอย่างเช่น: FILE(GLOB MY_SRCS dir/*) อีกวิธีคือระบุไฟล์ทีละไฟล์ วิธีไหนเป็นที่ต้องการ Globbing ดูง่าย แต่ฉันได้ยินมาว่ามีข้อเสียอยู่บ้าง
157 cmake 

4
ใน CMake ฉันจะทดสอบได้อย่างไรว่าคอมไพเลอร์เป็นเสียงดังกราว
เรามีชุดสคริปต์สร้างข้ามแพลตฟอร์ม CMakeและเราสนับสนุนการสร้างด้วยVisual C ++และ GCC เรากำลังลองเสียงดังกราวแต่ฉันไม่สามารถหาวิธีทดสอบได้ว่า Compiler นั้นเป็น Clang กับสคริปต์ CMake ของเราหรือไม่ สิ่งที่ฉันควรทดสอบเพื่อดูว่าคอมไพเลอร์เป็นเสียงดังกราวหรือไม่? ขณะนี้เรากำลังใช้MSVCและCMAKE_COMPILER_IS_GNU<LANG>ทดสอบ Visual C ++ และ GCC ตามลำดับ
151 c++  c  cmake  clang 

4
จะสร้างไลบรารีที่ใช้ร่วมกันด้วย cmake ได้อย่างไร?
ฉันได้เขียนไลบรารีที่ฉันเคยรวบรวมโดยใช้ Makefile ที่เขียนเอง แต่ตอนนี้ฉันต้องการเปลี่ยนไปใช้ cmake ต้นไม้มีลักษณะดังนี้ (ฉันลบไฟล์ที่ไม่เกี่ยวข้องทั้งหมดออกไป): . ├── include │ ├── animation.h │ ├── buffers.h │ ├── ... │ ├── vertex.h │ └── world.h └── src ├── animation.cpp ├── buffers.cpp ├── ... ├── vertex.cpp └── world.cpp ดังนั้นสิ่งที่ฉันพยายามทำก็แค่รวบรวมซอร์สลงในไลบรารีที่ใช้ร่วมกันแล้วติดตั้งด้วยไฟล์ส่วนหัว ตัวอย่างส่วนใหญ่ที่ฉันพบว่าคอมไพล์ไฟล์ปฏิบัติการกับไลบรารีที่แชร์บางไลบรารี แต่ไม่ใช่แค่ไลบรารีที่แชร์ธรรมดา นอกจากนี้ยังจะมีประโยชน์ถ้ามีคนบอกฉันเกี่ยวกับไลบรารีธรรมดา ๆ ที่ใช้ cmake ดังนั้นฉันสามารถใช้สิ่งนี้เป็นตัวอย่างได้



1
ทำให้ CMAKE สร้างข้อผิดพลาด
ฉันจะให้ CMAKE สร้างข้อผิดพลาดในเงื่อนไขเฉพาะได้อย่างไร นั่นคือฉันต้องการสิ่งนี้: if( SOME_COND ) error( "You can't do that" ) endif()
141 cmake 

2
CMake: โครงสร้างโครงการพร้อมการทดสอบหน่วย
ฉันกำลังพยายามจัดโครงสร้างโครงการของฉันเพื่อรวมแหล่งผลิต (ในsrcโฟลเดอร์ย่อย) และการทดสอบ (ในtestโฟลเดอร์ย่อย) ฉันใช้ CMake เพื่อสร้างสิ่งนี้ ตัวอย่างเล็ก ๆ น้อย ๆ ฉันมีไฟล์ต่อไปนี้: CMakeLists.txt: cmake_minimum_required (VERSION 2.8) project (TEST) add_subdirectory (src) add_subdirectory (test) src / CMakeLists.txt: add_executable (demo main.cpp sqr.cpp) src / sqr.h #ifndef SQR_H #define SQR_H double sqr(double); #endif // SQR_H src / sqr.cpp #include "sqr.h" double sqr(double x) { …

3
ความแตกต่างระหว่าง include_directories และ target_include_directories ใน CMake คืออะไร?
ฉันมีโครงสร้างไดเร็กทอรีสำหรับรหัส C ++ ของฉันซึ่งจะเป็นดังนี้: | |->include |->src ฉันกำลังเขียนไฟล์ CMakeLists.txt สำหรับรหัสของฉัน ฉันต้องการที่จะเข้าใจความแตกต่างระหว่างinclude_directoriesและในtarget_include_directoriesCMake อะไรคือความแตกต่างระหว่างการใช้งานและเพื่อเพิ่มเส้นทางไฟล์รวมของฉันฉันควรใช้อันไหน
134 c++  cmake 

6
วิธีรวบรวมไบนารี 32 บิตบนเครื่อง linux 64 บิตด้วย gcc / cmake
มันเป็นไปได้ที่จะรวบรวมโครงการใน32 บิตด้วยcmakeและgccใน64 บิตระบบ? มันอาจจะเป็น แต่ฉันจะทำอย่างไร? เมื่อฉันพยายามมันว่า "โง่เขลา" วิธีโดยไม่ต้องตั้งค่าพารามิเตอร์ใด ๆ / ธง / etc เพียงการตั้งค่าLD_LIBRARY_PATHเพื่อหาห้องสมุดเชื่อมโยงใน~/tools/libมันก็ดูเหมือนจะไม่สนใจมันและมีเพียงมองในไดเรกทอรีย่อยชื่อlib64
129 linux  gcc  64-bit  cmake  32-bit 

4
เชื่อมโยง CMake ไปยังไลบรารีภายนอก
จะทำให้ CMake เชื่อมโยงไฟล์ปฏิบัติการไปยังไลบรารีที่ใช้ร่วมกันภายนอกที่ไม่ได้สร้างภายในโครงการ CMake เดียวกันได้อย่างไร เพียงแค่target_link_libraries(GLBall ${CMAKE_BINARY_DIR}/res/mylib.so)ทำให้ข้อผิดพลาด make[2]: *** No rule to make target `res/mylib.so', needed by `GLBall'. Stop. make[1]: *** [CMakeFiles/GLBall.dir/all] Error 2 make: *** [all] Error 2 (GLBall is the executable) หลังจากที่ผมคัดลอกห้องสมุดเข้าไปใน bin/resdir ฉันลองใช้ find_library(RESULT mylib.so PATHS ${CMAKE_BINARY_DIR}/res) ซึ่งล้มเหลวด้วยRESULT-NOTFOUND.
126 cmake 

10
วิธีเริ่มทำงานกับ GTest และ CMake
ฉันเพิ่งถูกขายโดยใช้ CMake สำหรับการรวบรวมโปรเจ็กต์ C ++ ของฉันและตอนนี้ต้องการเริ่มเขียนการทดสอบหน่วยสำหรับรหัสของฉัน ฉันตัดสินใจที่จะใช้ยูทิลิตี้ Google Test เพื่อช่วยในเรื่องนี้ แต่ต้องการความช่วยเหลือในการเริ่มต้นใช้งาน ทุกวันผมได้อ่านคำแนะนำต่างๆและตัวอย่าง ได้แก่รองพื้นการแนะนำที่ IBMและคำถามบางอย่างเกี่ยวกับ SO ( ที่นี่และที่นี่ ) เช่นเดียวกับแหล่งข้อมูลอื่น ๆ ที่ฉันติดตามของหาย ฉันรู้ว่ามีอะไรมากมายที่นั่น แต่ฉันก็ยังคงประสบปัญหา ขณะนี้ฉันกำลังพยายามใช้การทดสอบขั้นพื้นฐานที่สุดเพื่อยืนยันว่าฉันได้รวบรวม / ติดตั้ง gtest ถูกต้องแล้วและไม่ได้ผล ไฟล์ต้นฉบับเดียว (testgtest.cpp) ถูกนำมาจากคำตอบก่อนหน้านี้เกือบทั้งหมด: #include <iostream> #include "gtest/gtest.h" TEST(sample_test_case, sample_test) { EXPECT_EQ(1, 1); } และ CMakeLists.txt ที่เกี่ยวข้องของฉันมีดังนี้: cmake_minimum_required(VERSION 2.6) project(basic_test) # Setup testing …


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