我正在尝试在CMake中添加一个生成一些文件的自定义构建步骤.我还没有找到它是如何工作的描述.
我有一个项目,其中必须由ODB for C++生成源文件,头文件和实现文件.ODB将类头作为参数,并生成我想在项目中使用的源文件.
现在我在我的CMakeLists.txt中有以下命令:
add_custom_command(TARGET ${PROJECT_NAME}
PRE_BUILD
COMMAND odb -o /home/david/dev/ --std c++11 -I/home/david/dev/ -d sqlite --generate- query --generate-schema ${PROMOTER_LIB_PREFIX}/entities/person.hpp
DEPENDS ${PROJECT_NAME}
VERBATIM
)
Run Code Online (Sandbox Code Playgroud)
对于文件person.hppODB应该产生person-odb.hxx,person-odb.cxx,person-odb.ixx但我特地用CMake的命令不会产生任何东西.在终端中,此命令正常工作.
我究竟做错了什么?
编辑:问题可以通过添加以下行来解决:
set(FAKE_TARGET fakeTarget)
add_custom_target(fakeTarget
odb -o /home/david/dev/ --std c++11 -I/home/david/dev/ -d sqlite --generate-query --generate-schema ${PROMOTER_LIB_PREFIX}/entities/person.hpp
)
add_dependencies(${PROJECT_NAME} ${FAKE_TARGET})
Run Code Online (Sandbox Code Playgroud) 我有一个Visual Studio项目,其中包含几个自定义构建步骤,但其中一些只是无法运行.没有错误也没有警告,并且根据构建日志它们正在运行,但它们肯定不是.
(它在2010年之前的Visual Studio版本中都有效,但在Visual Studio 2010及更高版本中出现了问题.)
custom-build-step visual-studio-2010 custom-build visual-studio
每次Intellij运行Make时,我都需要执行一个外部工具.在eclipse中我可以很容易地修改构建步骤,但我不知道如何实现这一点.
有任何想法吗?
我希望它能够使用外部脚本处理我的资源,而无需在每次测试运行之前手动运行它.
使用Visual Studio 2008,当我向C++项目添加一个不能.c/.cpp/.h/.rc或IDE无法识别的文件时,会弹出一个对话框,询问我是否要为这种文件创建自定义构建步骤规则.
有没有人知道如何在不添加文件的情况下进入此对话框?我似乎无法在任何菜单中找到.
编辑:我知道.rules文件的全部内容.我所说的是Visual Studio 2008中的GUI对话框,它允许您创建和编辑这些.rules文件.这是我提到的对话框,当您添加具有未知扩展名的文件时会弹出该对话框.
有人可以编写(或链接)一个演练,该演练解释了如何创建自定义MSBuild任务并在构建期间运行它吗?我正在寻找一个继承自己的自定义任务,Microsoft.Build.Utilities.Task并且只执行此操作:
public override bool Execute()
{
Log.LogMessage("Hello world!");
return true;
}
Run Code Online (Sandbox Code Playgroud)
(我一直在研究这个问题几个小时,并继续得到"没有找到[任何]任务.查看以下"消息.我想我必须错过某个必要的步骤.如果有一个明确的教程我可以遵循,也许我会弄明白我的不足之处.)
我在Visual Studio 2013解决方案中有一个自定义生成步骤.自定义生成步骤在文本文件上调用python脚本,该文件引用我的解决方案中的其他几个文件.我想要在任何这些文件发生更改或缺少脚本输出时调用自定义构建步骤.但是,我不想手动维护自定义工具"其他依赖项"和"输出"字段.
我可以轻松地使脚本生成依赖项列表,就像gcc在-MM中传入时生成.d文件一样.有没有办法可以使用我的脚本的.d输出自动填充自定义构建步骤中的"附加依赖项"?还有其他方法可以避免维护"附加依赖项"和"输出"字段吗?
在帮助页面只显示如何添加单个文件.
两个项目设置都允许我执行自定义命令.每个的好处或缺点是什么?
我们有一个内部编译器和链接器工具,我们正在尝试使 MSBUILD 兼容(即构建/增量构建/重建/清理场景中的正确行为)
在第一步中,我们实际上调用 CL 任务来预处理我们的文件。问题是我似乎无法弄清楚如何正确设置任务来执行此操作,以便它检测输出是否被删除或输入之一是否被修改。
第二步是使用正确的参数调用我们的编译器。
第三步是使用正确的参数调用我们的链接器。
我认为一旦第一步成功,第二步和第三步就会变得简单;我被困在第一步了。下面的示例代码。主 MFT 包含“#includes”,它引用 _MFTFiles 中命名的所有其他 MFT 文件 - 因此我们只需要处理主文件;但我们需要监控所有这些,因此如果我们更改它们,增量构建就能正常工作。如果有人有任何想法,我很想听听。我有 MSBUILD 书,当然也在这里搜索过,但我没有看到我想要实现的目标的示例。
提前致谢。
<ItemGroup Label="_MainMFT">
<MainMFT Include="MFTSystem.MFT"/>
</ItemGroup>
<ItemGroup Label="_MFTFiles">
<MFTFiles Include="MFTbject.MFT;DebuggerSupport.MFT;enumerations.MFT;collections.MFT;DataStream.MFT;Version.MFT"/>
</ItemGroup>
<Target Name="_PreprocessFiles"
BeforeTargets="Build"
DependsOnTargets=""
Inputs="@(MFTFiles)"
Outputs="@(MFTFiles->'%(Filename).MFTpp')">
<Message Text="PlatformToolsetVersion is $(PlatformToolsetVersion)" Importance="high"/>
<CL Sources="@(MainMFT)" PreprocessorDefinitions="_DEBUG;EL_DIAG_ENABLED" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" PreprocessToFile="true" PreprocessOutputPath="$(ProjectDir)%(Filename).MFTpp" />
<CL Sources="@(MainMFT)" PreprocessorDefinitions="" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" PreprocessToFile="true" PreprocessOutputPath="$(ProjectDir)%(Filename).MFTpp"/>
</Target>
<Target Name="_ObjectCompiler" AfterTargets="_PreprocessFiles;Build">
<Message Text="Calling ObjectCompiler...." Importance="high"/>
</Target>
<Target Name="_ObjectLinker" AfterTargets="_ObjectCompiler;Link">
<Message Text="Calling ObjectLinker...." Importance="high"/>
</Target>
Run Code Online (Sandbox Code Playgroud) 我正在开发一个iPhone应用程序,将有该应用程序的完整版和精简版.为了从相同的源代码和xcode项目中获取两个包,我向xcode项目添加了另一个目标.
现在,我想让Lite目标只复制资源文件的一部分到bundle.但是,xcode不会简单地让我从"Copy Files to Bundle"构建步骤中删除单个文件,因为我将所有资源都导入为文件夹引用.我需要这个来维护资源目录中的目录结构.
我该如何解决这个问题?任何建议或想法都非常感谢!
弗洛
我尝试使用共享的 .pch 文件,该文件在一个项目中编译并在其他项目中使用。
但是,如果 PCH 项目的 .pdb 文件名与其他项目的 .pdb 文件名不同,则 .pch 文件将被删除。
此页面没有回答问题:https://devblogs.microsoft.com/cppblog/shared-pch-usage-sample-in-visual-studio/
我不想对所有 PDB 使用相同的名称。
问题:
1)为什么.pch文件在其他项目编译开始时被删除,这会导致C1083错误(.pch未找到),如果PDB名称不相等,不像该页面那样?
2)我使用 COPY 命令复制 pch.pdb 和 pch.idb 文件,是否有 RENAME 命令或其他命令,如果复制的 pch.pdb 应该像依赖项目的 PDB 一样命名?在哪里可以找到自定义构建步骤命令的完整列表?
3)我不明白自定义构建步骤中“附加依赖项”和“输出”的目的。我可以将 .pch 文件名输入到依赖项列表中,这样它就不会被删除吗?输出列表是否需要包含依赖项目的 PDB 名称或 pch.pdb,或两者都包含?
c++ msbuild custom-build-step precompiled-headers visual-studio
msbuild ×3
build ×2
c++ ×2
c++11 ×1
cmake ×1
custom-build ×1
msbuild-task ×1
reference ×1
resources ×1
target ×1
visual-c++ ×1
xcode ×1