ปัญหาการทดสอบหน่วย CMake ด้วยคำสั่งที่กำหนดเองและการขึ้นต่อกัน

ฉันกำลังประสบปัญหาในการสร้างไลบรารีที่ใช้ร่วมกันและการทดสอบหน่วยที่ปฏิบัติการได้ (ซึ่งอยู่ในไดเร็กทอรีย่อย) ฉันต้องการดำเนินการทดสอบนี้เป็นการดำเนินการ POST_BUILD สำหรับไลบรารีที่ใช้ร่วมกัน ฉันก็เลยให้

Add_Custom_Command (TARGET ShLibName POST_BUILD COMMAND unit_test_exe)

CMake พ่นข้อความแสดงข้อผิดพลาดระหว่างกระบวนการสร้าง:

CMake Error: The inter-target dependency graph contains the following strongly connected component (cycle):
"libCUEUtilities" of type SHARED_LIBRARY depends on "UtilitiesUnitTest" 
"UtilitiesUnitTest" of type EXECUTABLE depends on "libCUEUtilities"

อย่างน้อยหนึ่งเป้าหมายเหล่านี้ไม่ใช่ STATIC_LIBRARY การขึ้นต่อกันแบบวนจะได้รับอนุญาตเฉพาะในไลบรารีแบบคงที่เท่านั้น

ดังนั้นฉันจะบรรลุสิ่งที่ฉันพยายามทำได้อย่างไร

ฉันใช้ CMake 2.8.1 (RC3) กับตัวสร้าง VS2005


person Surya    schedule 19.02.2010    source แหล่งที่มา


คำตอบ (1)


ดูเหมือนคุณต้องการรันการทดสอบหน่วยทุกครั้งที่คอมไพล์ไลบรารีที่แบ่งใช้ เนื่องจากการทดสอบที่ปฏิบัติการได้นั้นขึ้นอยู่กับไลบรารีที่แบ่งใช้อยู่แล้ว คุณสามารถเปลี่ยน add_custom_command ให้รันได้เมื่อมีการสร้างการทดสอบหน่วยที่ปฏิบัติการได้ ตัวอย่างเช่น:

add_library(CUEUtilities SHARED ${CUEUTILS_LIBRARY_SOURCES})
add_executable(unit_test_exe ${UNIT_TEST_EXE_SOURCES})
target_link_libraries(unit_test_exe CUEUtilities)
add_custom_command(TARGET unit_test_exe POST_BUILD 
                   COMMAND ${CMAKE_CURRENT_BINARY_DIR}/unit_test_exe)

การเปลี่ยนแหล่งที่มาของไลบรารีใดๆ จะทำให้ไลบรารีถูกคอมไพล์ใหม่ เนื่องจากไฟล์ปฏิบัติการนั้นขึ้นอยู่กับไลบรารี exe จะถูกเชื่อมโยงอีกครั้ง และในที่สุดขั้นตอนหลังการสร้างจะถูกรันอีกครั้ง

person richq    schedule 25.02.2010