6

के लिए सीएमके जेनरेटर मैं एक सीएमके परियोजना से क्रॉस-प्लेटफ़ॉर्म लिनक्स प्रोजेक्ट के लिए विजुअल स्टूडियो समाधान उत्पन्न करना चाहता हूं।विजुअल स्टूडियो लिनक्स क्रॉस-प्लेटफ़ॉर्म

विजुअल स्टूडियो 2017 क्रॉस-प्लेटफ़ॉर्म वर्कलोड अच्छी तरह से काम करता है, खासकर जब यह डिबगिंग की बात आती है। मैं इसे डब्लूएसएल को लक्षित करने के लिए उपयोग करता हूं। अब मेरे पास एक मौजूदा लिनक्स सीएमके प्रोजेक्ट है जिसे मैं विंडोज और विजुअल स्टूडियो पर विकसित करना चाहता हूं और इसे डब्लूएसएल पर बनाना चाहता हूं। मुझे विजुअल स्टूडियो के लिए उपयुक्त समाधान उत्पन्न करने का कोई तरीका नहीं दिख रहा है। क्या कोई मुझे प्रबुद्ध कर सकता है?

+0

डब्ल्यूएसएल क्या है? यदि आपको वीएस समाधान उत्पन्न करने की आवश्यकता है, जो विंडोज़ बाइनरी बनाने के लिए एमएसवीसी कंपाइलर का उपयोग करता है तो आप इसके लिए सेमेक-गुई का उपयोग कर सकते हैं। मैं सही जवाब दे सकता था, लेकिन मुझे और जानकारी चाहिए। – dragn

+0

डब्लूएसएल लिनक्स के लिए नया विंडोज सबसिस्टम है, जो आपको विंडोज़ पर लिनक्स बाइनरी चलाने की अनुमति देता है। आप वहां एसएसएच भी चला सकते हैं और फिर इसे क्रॉस-प्लेटफ़ॉर्म वर्कलोड के माध्यम से विंडोज़ पर वीएस से लक्षित कर सकते हैं। इसलिए मेरा सवाल है। – Felix

उत्तर

2

सीएमके द्वारा "लिनक्स" प्रोजेक्ट प्रकार का समर्थन करने के लिए पहले से ही some queries थे, लेकिन मुझे नहीं लगता कि there is something implemented yet (कोड को देखते हुए यह आवश्यक प्रोजेक्ट सेटिंग्स जेनरेट करने में सक्षम नहीं है)।

उन मामलों में आप केवल include_external_msproject() कमांड कॉल के साथ काम कर सकते हैं।

include_external_msproject(
    MyProject 
    ${CMAKE_CURRENT_SOURCE_DIR}/MyProject/MyProject.vcproj 
) 

तो चलो इस तरह एक मौजूदा लिनक्स .vcxproj फ़ाइल की एक टेम्पलेट बनाते हैं:

<?xml version="1.0" encoding="utf-8"?> 
<Project DefaultTargets="Build" ToolsVersion="@[email protected]" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 
    <ItemGroup Label="ProjectConfigurations"> 
    <ProjectConfiguration Include="Debug|x86"> 
     <Configuration>Debug</Configuration> 
     <Platform>x86</Platform> 
    </ProjectConfiguration> 
    <ProjectConfiguration Include="Release|x86"> 
     <Configuration>Release</Configuration> 
     <Platform>x86</Platform> 
    </ProjectConfiguration> 
    </ItemGroup> 
    <PropertyGroup Label="Globals"> 
    <ProjectGuid>@[email protected]</ProjectGuid> 
    <Keyword>Linux</Keyword> 
    <RootNamespace>@[email protected]</RootNamespace> 
    <MinimumVisualStudioVersion>@[email protected]</MinimumVisualStudioVersion> 
    <ApplicationType>Linux</ApplicationType> 
    <ApplicationTypeRevision>1.0</ApplicationTypeRevision> 
    <TargetLinuxPlatform>Generic</TargetLinuxPlatform> 
    <LinuxProjectType>{D51BCBC9-82E9-4017-911E-C93873C4EA2B}</LinuxProjectType> 
    </PropertyGroup> 
    <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" /> 
    <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x86'" Label="Configuration"> 
    <UseDebugLibraries>true</UseDebugLibraries> 
    </PropertyGroup> 
    <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x86'" Label="Configuration"> 
    <UseDebugLibraries>false</UseDebugLibraries> 
    </PropertyGroup> 
    <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" /> 
    <ImportGroup Label="ExtensionSettings" /> 
    <ImportGroup Label="Shared" /> 
    <ImportGroup Label="PropertySheets" /> 
    <PropertyGroup Label="UserMacros" /> 
    <ItemGroup> 
    <ClCompile Include="@[email protected]" /> 
    </ItemGroup> 
    <ItemGroup> 
    </ItemGroup> 
    <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> 
    <ImportGroup Label="ExtensionTargets" /> 
</Project> 

और

यह आपके CMake में किसी मौजूदा .vcproj फ़ाइल होगी तरह समाधान उत्पन्न इसका उपयोग करके एक नया add_linux_executable() कमांड बनाएं:

cmake_minimum_required(VERSION 2.8) 

project(ConfigureVCXProjForLinux) 

function(add_linux_executable _target) 
    if (CMAKE_GENERATOR MATCHES "Visual Studio ([0-9]*)") 
     foreach(_source IN LISTS ARGN) 
      get_filename_component(_source_abs "${_source}" ABSOLUTE) 
      file(TO_NATIVE_PATH "${_source_abs}" _source_native) 
      list(APPEND _sources "${_source_native}") 
     endforeach() 
     file(TO_NATIVE_PATH "${CMAKE_CURRENT_LIST_FILE}" _list_file_native) 
     list(APPEND _sources "${_list_file_native}") 

     string(
      UUID _guid 
      NAMESPACE "2e4779e9-c831-47b0-b138-3745b2ed6ba9" 
      NAME ${_target} 
      TYPE SHA1 
      UPPER 
     ) 

     configure_file(
      "LinuxTemplate.vcxproj.in" 
      "${CMAKE_CURRENT_BINARY_DIR}/${_target}.vcxproj" 
      @ONLY 
     ) 

     include_external_msproject(
      ${_target} 
      "${CMAKE_CURRENT_BINARY_DIR}/${_target}.vcxproj" 
      TYPE "8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942" 
      GUID "${_guid}" 
     ) 
    endif() 
endfunction() 

file(WRITE "main.cpp" [=[ 
    #include <iostream> 

    int main() 
    { 
     std::cout << "Hello Linux !" << std::endl; 
    } 
]=]) 
add_linux_executable(${PROJECT_NAME} "main.cpp") 

नोट टेम्पलेट प्रतिस्थापन:

  • दृश्य स्टूडियो संस्करण संख्या
  • @[email protected] कभी स्रोत फ़ाइल आप दे दिया है `` add_linux_executable (के लिए परियोजना RootNamespace
  • @[email protected] के लिए के लिए @[email protected]) `एक के रूप में तर्क
  • @[email protected] प्रोजेक्ट
के लिए एक अद्वितीय GUID

यह आपके द्वारा चुने गए संकलन विकल्पों के प्रति अभी भी एक टेम्पलेट की आवश्यकता होगी। लेकिन टेम्पलेट्स का उपयोग इस दृष्टिकोण को कुछ और अधिक लचीला बनाता है।

+0

'include_external_msproject()' अवधारणात्मक रूप से कार्य कैसे करेगा? – Felix

+0

@ फ़ेलिक्स मैंने एक उदाहरण जोड़ा है। लेकिन मुझे यह मानना ​​है कि 'include_external_msproject() 'वास्तव में आपके मामले में मदद नहीं कर सकता है, क्योंकि आपको मौजूदा वीएस प्रोजेक्ट फ़ाइलों को शामिल करने की आवश्यकता है। – Florian

+0

@ फ़ेलिक्स अधिक ठोस होने के लिए: मेरी परियोजनाओं में एक सीमेक उत्पन्न विजुअल स्टूडियो समाधान है जो मेरे प्रोजेक्ट का विंडोज संस्करण बनाता है। और उन समाधानों में एक एकल लिनक्स "बाहरी" प्रोजेक्ट शामिल है जो क्रॉस-कंपाइलिंग (फिर से सीएमके का उपयोग करके) के लिए बाहरी स्क्रिप्ट को कॉल करता है और मुख्य रूप से विजुअल स्टूडियो से बाहर (रिमोट) डिबगिंग के लिए उपयोग किया जाता है। लेकिन मैंने अभी तक लिनक्स वीएस परियोजनाओं का उपयोग नहीं किया है, मैं एक बाहरी वाणिज्यिक उपकरण का उपयोग कर रहा हूं जिसे ['विजुअलजीडीबी'] (https://visualgdb.com/) कहा जाता है। – Florian

संबंधित मुद्दे