在CMake中,我正在尝试构建一个包含多个不同处理器体系结构的库的项目,这些库由不同的工具链编译。对于每个体系结构,静态库构建在多个子目录中,然后收集到根目录中的共享库中。到目前为止,我还没有弄明白这一点。
到目前为止,我遇到的最接近的情况是使用子目录中的add_custom_command和add_custom_target来生成.a文件,然后再次尝试使用add_custom_command和add_custom_target将它们收集到根目录中的.so中。但是,如果我使.so依赖项指向自定义命令输出列表,makefile将显示"No rule to make ...“因为自定义命令
我在构建共享库和单元测试可执行文件(位于子目录中)时遇到了一个问题。我想将此测试作为共享库的POST_BUILD操作执行。所以我给了
Add_Custom_Command (TARGET ShLibName POST_BUILD COMMAND unit_test_exe)
CMake在生成过程中抛出错误消息:
CMake Error: The inter-target dependency graph contains the following strongly connected component (cycle):
"libCUEUtilities" of type S
我试图在使用CMake的构建环境中包含一个外部库。我不想在本地系统上安装它(实际上,我不想这样做,我不希望/usr/local被各种库阻塞);我只是想让生成的libxml2.a可用来链接到我的可执行文件。我可以在CMakeLists.txt中使用以下内容构建它:
set (LIBXML_PATH ${MY_SOURCE_DIR}/libxml2-2.9.1)
add_custom_target (build_libxml ALL
COMMENT "Building libxml"
COMMAND ./configure --prefix=/tmp
COM
我正在尝试让CMake运行三个bash命令或一个bash脚本。然而,我似乎不能让它工作。
bash命令包括:
cd ${CMAKE_SOURCE_DIR}/dependencies/library
make
cd ${CMAKE_BINARY_DIR}
实际上,我希望CMake在该目录中构建库,如果它还不存在。
下面是我尝试过的CMake代码:
if(NOT "${CMAKE_SOURCE_DIR}/dependencies/library/lib.o")
execute_process(COMMAND cd ${CMAKE_SOURCE_DIR}
我在我的模块的CMakeLists.txt中创建了一些自定义的目标执行,它按照模块的build.gradle中的标准模板引用,如下所示:
externalNativeBuild {
cmake {
path "CMakeLists.txt"
}
}
CMakeLists.txt包含以下命令(我认为这里包含了所有相关的内容):
add_custom_command(
OUTPUT ${BUILT_PRODUCT_FILEPATH} # The library built by ${CUSTOM_BUILD_COMMAND}, defined
每次编译后,我使用以下命令将配置文件复制到build目录中。
# Gather list of all .xml and .conf files in "/config"
file(GLOB ConfigFiles ${CMAKE_SOURCE_DIR}/config/*.xml
${CMAKE_SOURCE_DIR}/config/*.conf)
foreach(ConfigFile ${ConfigFiles})
add_custom_command(TARGET MyTarget PRE_BUILD
我试图提供一个简单的CMake函数,作为构建过程的一部分,将图呈现给PNG。我的想法是,我有一堆包含.uml图的PlantUML文件,我想将它们作为构建过程的一部分呈现给PNG。我想要一个类似于add_library() et的函数。阿尔。它呈现图像文件比源文件更早的任何关系图。
使用,我得到了以下代码片段:
#
# Create top-level target that renders a PlantUML diagram to a PNG image.
#
function(add_diagram target source)
# Program used to render th
在CMake POST_BUILD命令中遇到问题。每当我试图构建我的CMake项目(libFDSequencer)时,我都会使用伪随机错误代码(任何123到9009之间的错误代码)出错。我已经将问题的根源缩小到这样一个事实,即CMake显然会围绕aa add_custom_command()调用生成额外的批处理代码。我通过使用Visual构建我的项目、访问我的项目属性并签出POST_BUILD命令来发现这一点。
运行自定义命令的CMake代码如下所示。
# The first line is the original command I want to run (which also work
我有一个带有一些资产(着色器)文件的项目,这些文件也经常更新,需要在每次生成项目时都复制到构建目标文件夹。
现在,文件是第一次复制的,但是当重建项目时(从Clion内部),文件不会被不断地复制。例如,如果我从复制到的目录中删除它们,它们就不会再次出现。
这是我的Cmake文件:
# Name for this project
set(PROJECT_NAME "3d_model")
# Choose the library for the final build
set(PROJECT_BUILD_DIR ${CMAKE_SOURCE_DIR}/bin/${PROJECT_N
我在linux上,我需要用cmake创建一个Makefile,用这种方式修改我的makefile:
@old:
# CMAKE generated file: DO NOT EDIT!
# Generated by "Unix Makefiles" Generator, CMake Version 2.6
# Default target executed when no arguments are given to make.
default_target: all
...stuff
@new:
# CMAKE generated file: DO NOT EDIT!
#
我的CMake代码如下所示:
macro(macro_name target_name)
add_custom_command(TARGET ${target_name}
POST_BUILD
COMMAND MyCommand)
endmacro()
运行这个程序,我会得到以下消息:
CMake Warning (dev) at ... (add_custom_command):
Policy CMP0040 is not set: The target in the TARGET signature of
add_custom_command() m
我必须在我们的构建系统中合并cmake的cmake和cmake。构建系统应该能够同时使用make和cmake选项。问题是cmake的make导出并不包含所有变量和设置,这些变量和设置需要在我们的构建系统中设置为make。基本上,我们使用三个复杂的构建系统进行跨平台开发,我不喜欢把所有东西都放在很多地方,因为那样很难维护系统。例如,来自所有构建系统中的许多编码器的makefile包括常见的文件,例如:
include $(PROJECT_CONF_DIR)/common/something.mk
如何用cmake解题?我不喜欢修改编码器的CMakeLists.txt (最大单行解决方案),而且我