Było już some queries do obsługi projektu typu "Linux" przez CMake, ale nie sądzę, że there is something implemented yet (patrząc na kod nie jest w stanie wygenerować wymaganych ustawień projektu).
W tych przypadkach można pracować tylko z połączeniami poleceń include_external_msproject()
.
Obejmuje to istniejący plik do CMake .vcproj
generowane rozwiązanie jak:
include_external_msproject(
MyProject
${CMAKE_CURRENT_SOURCE_DIR}/MyProject/MyProject.vcproj
)
Warto więc zrobić szablon istniejącego systemu Linux .vcxproj
pliku takiego:
<?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>
I Utwórz nową komendę add_linux_executable()
, używając:
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")
zanotować zamienniki szablonów:
Wymagałoby to jednego szablonu na dowolne wybrane opcje kompilacji. Jednak korzystanie z szablonów sprawia, że podejście to jest nieco bardziej elastyczne.
Co to jest WSL? Jeśli potrzebujesz wygenerować rozwiązanie VS, które używa kompilatora MSVC do budowania binariów Windows, możesz po prostu użyć cmake-gui. Mógłbym poprawić właściwą odpowiedź, ale potrzebuję więcej informacji. – dragn
WSL to nowy podsystem systemu Windows dla systemu Linux, który umożliwia uruchamianie plików binarnych systemu Linux w oknach. Możesz także uruchomić ssh, a następnie skierować go z VS w Windowsie poprzez obciążenie międzyplatformowe. Dlatego moje pytanie. – Felix