在 <project>CMake 中隐藏_automoc目标
Hide <project>_automoc targets in CMake
我正在尝试使用CMAKE_AUTOMOC属性来自动查找和编译mocable文件。
但是,命令set( CMAKE_AUTOMOC ON )
还在Visual Studio"源文件"筛选器中包含生成的_automoc.cpp文件。这是一个有两个原因的问题:
- 即使以前没有使用过,它也会创建过滤器,从而污染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" )
在名为"源文件"的VS过滤器中,我可以看到main.cpp和myproj_automoc.cpp,它们在第一次编译之前甚至不存在(试图用VS打开它会发送错误"无法打开文件")。在myproj.vcxproj.filter中有一个条目:
Include="C:pathtobuildmyproj_automoc.cpp">
<Filter>Source Files</Filter>
它不应该在这里,因为我没有要求它。
我是不是错过了什么?
谢谢你的帮助!
我也很难将其作为文档来使用。看起来他们在其中一个版本中重命名了变量。从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 )
从CMake 3.9开始,您可以使用AUTOGEN_SOURCE_GROUP
来过滤MOC文件。
set(CMAKE_AUTOMOC ON)
set_property(GLOBAL PROPERTY AUTOGEN_SOURCE_GROUP "Generated Files")
- 这是我尝试让用户将值输入到数组中.然后将其隐藏为大量的星号
- 结构和双指针隐藏在其他结构中,多层混淆
- 在 cpp 文件中隐藏采用模板参数引用的方法
- 参数包构造函数在类模板中隐藏用户定义的转换
- 如何等待窗口隐藏在Qt中?
- 如何使用类型别名从模板化类中隐藏模板列表
- 在设计 SDK 时,我是否应该在 C++ 头文件中完全隐藏内部类?
- 名称隐藏对静态函数继承的实例使用
- 在 Linux 中使用 ioctl() 获取隐藏功能报告时,零字节消失
- 从多个模板化基类派生时出现"隐藏重载的虚函数"警告
- 如何在 Omnet++ 5.6.1 中隐藏箭头?
- 在C++中隐藏键盘记录器的控制台窗口
- 从静态库使用时隐藏不透明结构的内容
- 隐藏用于聚合初始化的空基类
- 使用智能指针指向 C 库中的结构,该结构通过 typedef 隐藏实现(即不完整的类型)
- Qt中的包装连接方法隐藏了编译器所需的信息
- 隐藏重载虚拟功能的模板化访客:SFINAE 在使用?
- 在 ui 文件中隐藏 QTabWidget 中的单个选项卡窗格?
- C++ [错误] 声明'char '隐藏参数。什么意思?
- 隐藏由 WinAPI 调用创建的窗口