मैं सीएमके के साथ कुछ जावा कोड संकलित करने की कोशिश कर रहा हूं (मुझे पता है कि जावा वास्तव में सीएमके के लिए उपयोग-मामला नहीं है) और मैं फाइलों के लिए कक्षा पथ प्रदान करना चाहता हूं। संकलन को यूनिक्स और विंडोज सिस्टम दोनों पर काम करना चाहिए। मेरी समस्या विभिन्न वर्ग पथों को अलग करने के साथ है। का उपयोग करना:

set(CLASS_PATH ${PATH1} ${PATH2})
message(STATUS "${CLASS_PATH}")

प्रिंट

<PATH1>;<PATH2>

लेकिन यह यूनिक्स और विंडोज दोनों पर होता है। इसलिए मुझे विभाजकों को मैन्युअल रूप से जोड़ना होगा। जिस तरह से मैं यह कर रहा हूँ

if(${CMAKE_HOST_WIN32})
    set(SEP "\;")
elseif(${CMAKE_HOST_UNIX})
    set(SEP ":")
endif(${CMAKE_HOST_WIN32})

क्या यह वास्तव में विभाजकों से निपटने का सबसे अच्छा तरीका है? मुझे ऐसा लग रहा है कि मुझे कुछ याद आ रहा है।

अपडेट - एमसीवीई

मेरे विचार का वर्णन करने के लिए: FILE_LIST में वे सभी जावा फाइलें होंगी जिन्हें मैं संकलित करना चाहता हूं। मैंने एक कस्टम फ़ंक्शन परिभाषित किया है जिसे मैं इस FILE_LIST पर कॉल कर सकता हूं और फाइलों को संकलित कर सकता हूं। शायद मैं फ़ंक्शन पैरामीटर के साथ कुछ गलत कर रहा हूँ?

cmake_minimum_required(VERSION 3.11)


set(CLASS_PATH E:/tmp/cmake/separator C:/tmp/)

set(FILE_LIST 1.txt 2.txt 3.txt)

add_custom_target(war ALL)

function(compile_java clp)
    foreach(java_file ${ARGN})
        add_custom_command(
            TARGET war
            PRE_BUILD
            COMMAND echo "${clp}" ${java_file}
        )
    endforeach(java_file)
endfunction()


compile_java("${CLASS_PATH}" ${FILE_LIST}) # I have to pass CLASS_PATH in quotes
1
Philipp 19 जून 2018, 11:06

1 उत्तर

सबसे बढ़िया उत्तर

इसलिए, टिप्पणियों के आधार पर, आप एक प्लेटफ़ॉर्म-विशिष्ट विभाजक के साथ पथ सूची को एकल कमांड-लाइन तर्क के रूप में चाहते हैं। आप स्ट्रिंग ऑपरेशंस का उपयोग करके इसे प्राप्त कर सकते हैं:

function(compile_java clp)
    if(NOT CMAKE_HOST_WIN32)
        string(REPLACE ";" ":" clp "${clp}")
    endif()
    foreach(java_file ${ARGN})
        add_custom_command(
            TARGET war
            PRE_BUILD
            COMMAND echo "${clp}" ${java_file}
        )
    endforeach(java_file)
endfunction()
1
Angew is no longer proud of SO 19 जून 2018, 15:47