Makefile 同一CMake项目中的多个make目标

Makefile 同一CMake项目中的多个make目标,makefile,cmake,project-management,Makefile,Cmake,Project Management,在我的项目中,我有一个生成文件,如下所示: CXX = clang++ CFLAGS = -std=c++11 COMMON_SOURCES = file1.cpp file2.cpp TARGET_SOURCES = main.cpp TEST_SOURCES = run_tests.cpp test_file1.cpp test_file2.cpp COMMON_OBJECTS = $(COMMON_SOURCES:.c=.o) TARGET_OBJECTS = $(TARGET_SOUR

在我的项目中,我有一个生成文件,如下所示:

CXX = clang++
CFLAGS = -std=c++11 
COMMON_SOURCES = file1.cpp file2.cpp
TARGET_SOURCES = main.cpp
TEST_SOURCES = run_tests.cpp test_file1.cpp test_file2.cpp
COMMON_OBJECTS = $(COMMON_SOURCES:.c=.o)
TARGET_OBJECTS = $(TARGET_SOURCES:.c=.o)
TEST_OBJECTS = $(TEST_SOURCES:.c=.o)
EXECUTABLE = build/application
TEST_EXECUTABLE = build/tests
.PHONY: all target tests
all: target tests
target: $(EXECUTABLE)
tests: $(TEST_EXECUTABLE)
clean:
    rm build/tests & rm build/application &
$(EXECUTABLE): $(COMMON_OBJECTS) $(TARGET_OBJECTS)
    $(CXX) $(CFLAGS) $(LDFLAGS) $^ -o $@
$(TEST_EXECUTABLE): $(COMMON_OBJECTS) $(TEST_OBJECTS)
    $(CXX) $(CFLAGS) $(LDFLAGS) $^ -o $@
.c.o:
    $(CXX) $(CFLAGS) $< -o $@
CXX=clang++
CFLAGS=-std=c++11
公共_源=file1.cpp file2.cpp
TARGET_SOURCES=main.cpp
测试\u源=运行\u测试.cpp测试\u文件1.cpp测试\u文件2.cpp
公共_对象=$(公共_源:.c=.o)
目标\对象=$(目标\源:.c=.o)
测试对象=$(测试源:.c=.o)
可执行文件=构建/应用程序
测试\可执行文件=构建/测试
.虚假:所有目标测试
所有:目标测试
目标:$(可执行)
测试:$(测试可执行文件)
清洁:
rm构建/测试和rm构建/应用程序&
$(可执行文件):$(通用对象)$(目标对象)
$(CXX)$(CFLAGS)$(LDFLAGS)$^-o$@
$(测试\可执行文件):$(公共\对象)$(测试\对象)
$(CXX)$(CFLAGS)$(LDFLAGS)$^-o$@
.c.o.:
$(CXX)$(CFLAGS)$<-o$@
这让我可以运行
maketests
maketarget
,它将构建适当的可执行文件


如何设置CMakeLists文件以获得相同的方便构建系统?

每个
添加自定义\u目标()
(以及一些其他命令,如
添加可执行文件
)实际上会在make sence中添加目标

add_custom_target(tests) # Note: without 'ALL'
add_executable(test_executable ...) # Note: without 'ALL'
add_dependencies(tests test_executable)

因此,
test\u executable
将基于
make tests
,但在简单的
make
的情况下,除了使用clang++,我认为如果您将以下内容放在CMakeLists.txt文件中,然后在构建目录中运行cmake配置步骤(即
mkdir build;cd build;cmake..
),你应该得到你想要的

project(myproject)

# I am not sure how you get cmake to use clang++ over g++
# CXX = clang++

add_definitions(-std=c++11)
set(COMMON_SOURCES file1.cpp file2.cpp)
set(TARGET_SOURCES main.cpp)
set(TEST_SOURCES  run_tests.cpp test_file1.cpp test_file2.cpp)
add_executable(application ${COMMON_SOURCES} ${TARGET_SOURCES})
add_executable(tests ${COMMON_SOURCES} ${TEST_SOURCES})

我得到一个错误
add\u可执行文件,调用的参数数量不正确
也许有一个基本步骤我不知道?我对cmake知之甚少。对不起,我刚刚用
源代码
替换了
对象
,效果很好。是的,很抱歉。我将makefile逻辑转录到cmake时出现了一个粗心的错误。我刚刚修改了我的答案。