#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
Спасибо.