cmake 属性 VS_USER_PROPS 静默忽略
Posted
技术标签:
【中文标题】cmake 属性 VS_USER_PROPS 静默忽略【英文标题】:cmake property VS_USER_PROPS silently ignored 【发布时间】:2021-06-29 15:49:01 【问题描述】:我尝试向 cmake 为 Visual Studio 2019 生成的项目添加几个现有的 props 文件(属性文件随 gstreamer 提供,我想将它们重用于 Windows 构建,而不是手动添加所有依赖项)。
我为此创建了一个 user.props 文件:
videolib.deps.props
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ImportGroup Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Label="LocalAppDataPlatform" />
<Import Project="C:\gstreamer\1.0\msvc_x86_64\share\vs\2010\libs\glib-2.0.props" />
<Import Project="C:\gstreamer\1.0\msvc_x86_64\share\vs\2010\libs\gstreamer-1.0.props" />
</ImportGroup>
</Project>
我没有收到任何错误,但文件未添加到生成的项目中。
这是我的 CMakeLists.txt:
根目录:
cmake_minimum_required(VERSION 3.20)
set(CMAKE_VERBOSE 1)
project(videolib
VERSION 0.1
DESCRIPTION "A videoplayer library based on a gstreamer. Allows playback and simple editing of a video."
LANGUAGES CXX)
set(CMAKE_CXX_STANDARD 20 CACHE STRING "The C++ standard to use")
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)
if(CMAKE_PROJECT_NAME STREQUAL PROJECT_NAME)
include(CTest)
endif()
add_subdirectory(videolib)
#add_subdirectory(test-videolib)
#add_subdirectory(test-videolib-impl)
在videolib
子目录:
cmake_minimum_required(VERSION 3.20)
add_library(videolib-common INTERFACE)
target_sources(videolib-common INTERFACE
src/videolib_impl.cpp
src/videolib.cpp)
target_include_directories(videolib-common INTERFACE
src
include)
add_library(videolib SHARED)
target_link_libraries(videolib videolib-common)
set_target_properties(videolib PROPERTIES VS_USER_PROPS "videolib.deps.props")
配置过程中没有错误:
(env) d:\projects\videolib\build>cmake -S .. -G "Visual Studio 16 2019"
-- Selecting Windows SDK version 10.0.19041.0 to target Windows 10.0.18363.
-- The CXX compiler identification is MSVC 19.27.29111.0
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Check for working CXX compiler: D:/Program Files (x86)/Microsoft Visual Studio/2019/Community/VC/Tools/MSVC/14.27.29110/bin/Hostx64/x64/cl.exe - skipped
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Configuring done
-- Generating done
-- Build files have been written to: D:/projects/videolib/build
但是在构建期间 (cmake --build --config Debug .
) 我收到一个错误,指出找不到 glib.h
,这在未添加 gstreamer 依赖项时很典型。在生成的项目文件中也没有提到videolib.deps.props
。
【问题讨论】:
@ChrisMM 谢谢,添加$CMAKE_CURRENT_SOURCE_DIR/
确实解决了这个问题。如果您将回复添加为答案,我会将其标记为 accepted
答案。
【参考方案1】:
试试:
set_property(
TARGET videolib
PROPERTY VS_USER_PROPS "$CMAKE_CURRENT_SOURCE_DIR/videolib.deps.props"
)
可能只是在错误的目录中搜索。
【讨论】:
VS_USER_PROPS
中的路径被逐字插入到 VS 项目文件中。因此,应始终使用某种形式的绝对路径。 (请注意,此行为允许您引用 msbuild 变量,例如 $(UserRootDir)
和 $(Platform)
)。以上是关于cmake 属性 VS_USER_PROPS 静默忽略的主要内容,如果未能解决你的问题,请参考以下文章