我正在尝试使用CMAKE_AUTOMOC属性自动查找和编译mocable文件。
但是,命令set( CMAKE_AUTOMOC ON )
还包括Visual Studio中生成的_automoc.cpp文件"源文件"过滤。这是一个问题,原因有两个:
我想知道是否有可能:
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"到#34;源文件"过滤
我目前正在使用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打开它发送错误&# 34;无法打开文件")。在myproj.vcxproj.filters中有一个条目:
Include="C:\pathto\build\myproj_automoc.cpp">
<Filter>Source Files</Filter>
因为我没有要求,所以不应该在这里。
我错过了什么吗?
感谢您的帮助!
答案 0 :(得分:3)
我也难以将此工作记录下来。看起来他们在其中一个版本中重命名了变量。从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文件夹放在&#34; MyAutoMocFolder&#34;而不是乱丢他们的父文件夹。在Visual Studio中,文件夹中的automoc文件夹也是如此。
但是,它并不隐藏生成的project_automoc.cpp文件。要移动那些你必须定义一个源组,正如Armand所指出的那样:
source_group( MyAutoMocFolder FILES ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}_automoc.cpp )