Отсутствует опция CompileAs в vcxproj, сгенерированном cmake 3.18.1

#cmake #vcxproj

#cmake #vcxproj

Вопрос:

Когда я генерирую .vcxproj для моего проекта с помощью cmake 3.2.1, он генерирует строку <CompileAs>CompileAsCpp</CompileAs> Но когда я пытаюсь использовать cmake версии 3.18.1, сгенерированный файл .vcxproj не содержит этой предыдущей строки, что приводит к сбою моих тестов (код компилируется). Вот код cmake, который задает свойства проекта :

 add_library(${PROJECT_NAME} SHARED ${PROJECT_SRC})

if(CMAKE_BUILD_TOOL MATCHES "(msdev|devenv|nmake|MSBuild)")
    target_compile_options(${PROJECT_NAME} PRIVATE "/TP")
endif()

target_include_directories(${PROJECT_NAME} PRIVATE ${PUBLIC_INCLUDES} ${PRIVATE_INCLUDES} )
set_target_properties(${PROJECT_NAME} PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
set_target_properties(${PROJECT_NAME} PROPERTIES LIBRARY_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
set_target_properties(${PROJECT_NAME} PROPERTIES ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
set_target_properties(${PROJECT_NAME} PROPERTIES PDB_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
  

Как я могу попросить cmake сгенерировать эту недостающую строку ( <CompileAs>CompileAsCpp</CompileAs> )?
Спасибо.

Комментарии:

1. Как этот отсутствующий тег приводит к сбою ваших тестов? Какие файлы находятся в PROJECT_SRC? Кроме того, для какой версии Visual Studio вы создаете код?

2. Немного почитав код, кажется странным, что вам нужен этот флаг / TP. Вы должны иметь возможность установить язык проекта на CXX, а CMake сделает все остальное.

3. Привет @Botje, спасибо за твой ответ. Я создаю решение VS2015, но я работаю с Visual Studio 2019.

4. Мой код написан на C, но dll должна быть скомпилирована как C , чтобы использоваться в тестовом проекте. Я пытался определить свой основной проект как CXX, но у меня не получилось. Я также пытался установить стандарт CXX на 11, но проблема все та же.

Ответ №1:

Я попытался использовать CMake 3.18.0, и это сработало. Тег CompileAs был сгенерирован, поэтому я буду использовать эту версию вместо CMake 3.18.1

Спасибо.