सीएमके द्वारा "लिनक्स" प्रोजेक्ट प्रकार का समर्थन करने के लिए पहले से ही 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")
नोट टेम्पलेट प्रतिस्थापन:
के लिए एक अद्वितीय GUID
यह आपके द्वारा चुने गए संकलन विकल्पों के प्रति अभी भी एक टेम्पलेट की आवश्यकता होगी। लेकिन टेम्पलेट्स का उपयोग इस दृष्टिकोण को कुछ और अधिक लचीला बनाता है।
डब्ल्यूएसएल क्या है? यदि आपको वीएस समाधान उत्पन्न करने की आवश्यकता है, जो विंडोज़ बाइनरी बनाने के लिए एमएसवीसी कंपाइलर का उपयोग करता है तो आप इसके लिए सेमेक-गुई का उपयोग कर सकते हैं। मैं सही जवाब दे सकता था, लेकिन मुझे और जानकारी चाहिए। – dragn
डब्लूएसएल लिनक्स के लिए नया विंडोज सबसिस्टम है, जो आपको विंडोज़ पर लिनक्स बाइनरी चलाने की अनुमति देता है। आप वहां एसएसएच भी चला सकते हैं और फिर इसे क्रॉस-प्लेटफ़ॉर्म वर्कलोड के माध्यम से विंडोज़ पर वीएस से लक्षित कर सकते हैं। इसलिए मेरा सवाल है। – Felix