我正在尝试使用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>
这本不应该在这里,因为我没有要求它。
我错过了什么吗?
谢谢你的帮助!
2条答案
按热度按时间vlju58qv1#
我也遇到了一些麻烦,看起来他们在某个版本中重命名了这个变量。从Cmake 3.0.2开始,你可以做以下事情:
请注意,您必须使用set_property,且属性名称现在为AUTOGEN_TARGETS_FOLDER。
在Xcode中,这会将生成的_automoc文件夹放在“MyAutoMocFolder”中,而不是将它们放在父文件夹中。在Visual Studio中,automoc文件夹也会放在文件夹中。
但是它并没有隐藏生成的project_automoc. cpp文件。要移动这些文件,你必须定义一个源组,正如Armand指出的:
qnakjoqk2#
从CMake 3.9开始,您可以使用
AUTOGEN_SOURCE_GROUP
来过滤MOC文件。