gpt4 book ai didi

makefile - 从 make 移动到 cmake : how to use build target with wildcards

转载 作者:行者123 更新时间:2023-12-04 20:53:59 25 4
gpt4 key购买 nike

我正在尝试将 makefile-build 转换为 cmake(以避免当前状态被迫照顾基于 make/msdev 的 windows-build env 和基于 make/gcc 的 linux)。

在这个项目中,我找到了一个完整的源代码文件目录,根据命名约定,这些文件被编译为库。 (例如 c1223.c => c1223.dll (或 .sl) )

当前的 makefile 包含一些使用通配符的指令,例如:

LIB_NO  = $(basename $(subst s,,$@))

OBJ = $(OBJ_PATH)/s$(LIB_NO).o $(OBJ_PATH)/c$(LIB_NO).o\
$(OBJ_PATH)/b$(LIB_NO).o

$(OBJ_PATH)/%.o : %.c
-$(CC) $(CFLAGS) -I$(PWD) -c $< -o $@
-(chmod a+w $@;true)

我已经搜索了一段时间,但找不到任何似乎有效的东西。 cmake 甚至可以让它生成基于通配符的构建吗?

非常欢迎任何意见、提示和建议:)

干杯
马库斯

最佳答案

您可以使用相当原始的通配符(我看不到正则表达式语法)。

file(GLOB TESTSRCS "test/src/*.cpp")

# Compile the test sources.
add_executable(Tests ${TESTSRCS})

target_link_libraries(Tests ${LIB} gtest gtest_main)

实际的 makefile 中似乎不包含通配符搜索。如果添加新文件,则需要重新运行 cmake。

我不知道的是,如果您有许多不同的库文件要生成,您将如何设法将库创建包装在一个宏中。

如果每个库只有一个 c 文件,您可能可以执行以下操作:
file(GLOB libfiles "path/to/libs/c*.c")

foreach(libfile ${libfiles})
GET_FILENAME_COMPONENT(libname ${libfile} NAME) # remove the '.c' part (untested, hopefully this will work)
add_library(${libname} ${libfile})
endforeach(libfile)

如果其他人有更好的解决方案,我也想学习它。

关于makefile - 从 make 移动到 cmake : how to use build target with wildcards,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6909036/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com