CMake на проекте C #: любой процессор? - PullRequest
2 голосов
/ 28 октября 2019

Я недавно завладел проектом Windows, написанным на C #, и сумел создать CMakeLists, чтобы можно было создавать решение на лету и создавать его с помощью Visual Studio.

Это происходит какзамена устаревшего файла * .sln, который все разработчики проверяли в репозитории. Все идет нормально. Теперь я хотел бы быть более конкретным в отношении целевой платформы и разрешить «Любой процессор», как это делало упомянутое устаревшее решение. Точнее, я бы хотел, чтобы файлы * .csproj показывали:

<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|AnyCPU'" Label="Configuration">

Я следил за этим потоком GitLab , но добавление target_compile_options(MyProject PRIVATE "/platform:anycpu") или set(CMAKE_CSharp_FLAGS "/platform:anycpu") добавляет только <PlatformTarget>anycpu</PlatformTarget>в соответствующую группу PropertyGroup вместо преобразования «Release | x64» в «Release | AnyCPU»:

<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
    <PlatformTarget>anycpu</PlatformTarget>

В проекте есть основной файл CMakeLists.txt, который добавляет подкаталоги (add_subdirectory). Подпроект CMakeLists структурирован следующим образом:

cmake_minimum_required(VERSION 3.10)

project(MyProject VERSION 1.0.0 LANGUAGES CSharp)


include(CSharpUtilities)

add_executable(MyProject...)

csharp_set_designer_cs_properties(...)
csharp_set_xaml_cs_properties(...)


target_compile_options(MyProject PRIVATE "/platform:anycpu" )

set_source_files_properties(...)

Я довольно зациклен на этом, поскольку это имеет значение для TeamCity, который, похоже, ищет конкретные пары {Configuration, Platform} непосредственно путем синтаксического анализафайлы * .csproj, и жалуются, если не могут найти «Release | AnyCPU».

Большое спасибо за любые подсказки.

...