我正在尝试使用 CMAKE_AUTOMOC 属性自动查找和编译可移动文件。
但是,命令 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" )
用于将条目“文件路径”添加到“源文件”过滤器。
我目前正在使用 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.filters 中有一个条目:
Include="C:\pathto\build\myproj_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 )
关于c++ - 在 CMake 中隐藏 <project>_automoc 目标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36593180/