在< project>CMake中隐藏自动目标(_A)

szqfcxe2  于 2022-11-11  发布在  其他
关注(0)|答案(2)|浏览(123)

我正在尝试使用CMAKE_AUTOMOC属性自动查找和编译mocable文件。
但是,命令set( CMAKE_AUTOMOC ON )还将生成的_automoc.cpp文件包含在Visual Studio的“源文件”筛选器中。这是一个问题,原因有两个:

  • 它会创建筛选器(即使以前未使用过),因此会污染VS资源管理器。
  • 它会在其他原始程式档的中间,加入不应该手动修改至方案的其他档案。

我想知道是否有可能:
1)阻止CMake将此文件包含到Visual Studio筛选器中。我搜索并找到了https://cmake.org/Bug/print_bug_page.php?bug_id=13788。但是使用

SET_PROPERTY(GLOBAL PROPERTY USE_FOLDERS ON)
SET_PROPERTY(GLOBAL PROPERTY AUTOMOC_FOLDER automoc)

并没有改变我的问题。
2)使用CMake从.vcxproj.filters文件中移除给定项,方法是使用类似于

source_group( "Source Files" FILES "filepath" )

它用于将条目“filepath”添加到“源文件”筛选器中。
我目前使用的是CMake 3.5、VS 2015和Qt 5.6。以下是CMake的一个简短版本,它重现了这个问题:

project( myproj )

# Some stuff to include Qt libraries

# ...

set( CMAKE_AUTOMOC ON )

# These 2 lines don't change anything

SET_PROPERTY(GLOBAL PROPERTY USE_FOLDERS ON)
SET_PROPERTY(GLOBAL PROPERTY AUTOMOC_FOLDER automoc)

# Create project

add_executable( ${PROJECT_NAME} "main.cpp" )

在名为“Source Files”的VS筛选器中,我可以看到main.cpp和myproj_automoc.cpp,它们在第一次编译之前甚至不存在(尝试用VS打开它会发送错误“Cannot open the file”)。在myproj.vcxproj.filters中有一个条目:

Include="C:\pathto\build\myproj_automoc.cpp">
<Filter>Source Files</Filter>

这本不应该在这里,因为我没有要求它。
我错过了什么吗?
谢谢你的帮助!

vlju58qv

vlju58qv1#

我也遇到了一些麻烦,看起来他们在某个版本中重命名了这个变量。从Cmake 3.0.2开始,你可以做以下事情:

cmake_minimum_required(VERSION 3.0.2)
project(MyProj CXX)
set_property(GLOBAL PROPERTY USE_FOLDERS ON)
set_property(GLOBAL PROPERTY AUTOGEN_TARGETS_FOLDER MyAutoMocFolder)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)
set(CMAKE_AUTOUIC ON)
add_executable(${PROJECT_NAME}
    ${MyProj_HEADERS}
    ${MyProj_SRCS}
    ${MyProj_QRC}
    ${MyProj_UI})

请注意,您必须使用set_property,且属性名称现在为AUTOGEN_TARGETS_FOLDER。
在Xcode中,这会将生成的_automoc文件夹放在“MyAutoMocFolder”中,而不是将它们放在父文件夹中。在Visual Studio中,automoc文件夹也会放在文件夹中。
但是它并没有隐藏生成的project_automoc. cpp文件。要移动这些文件,你必须定义一个源组,正如Armand指出的:

source_group( MyAutoMocFolder FILES ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}_automoc.cpp )
qnakjoqk

qnakjoqk2#

从CMake 3.9开始,您可以使用AUTOGEN_SOURCE_GROUP来过滤MOC文件。

set(CMAKE_AUTOMOC ON)
set_property(GLOBAL PROPERTY AUTOGEN_SOURCE_GROUP "Generated Files")

相关问题