14

我编写了一个CMakeLists.txt包含 2 个可执行文件(target1target2)的文件:

ADD_EXECUTABLE(target1 ${CXX_FILES})
TARGET_LINK_LIBRARIES(target1 ${requiredlibs})

ADD_EXECUTABLE(target2 ${CXX_FILES} ${OTHER_CXX_FILES})
TARGET_LINK_LIBRARIES(target2 ${requiredlibs})

现在,每次我在没有任何参数的情况下运行 make 时,都会重建两个目标。但我想定义target1为默认可执行文件,以便只运行不带任何参数的 make target1。对于建筑target2,我会跑make target2

这可能吗?

在 CMake 创建的 Makefile 中有如下定义: default_target: all

我想我需要一种方法将其设置default_targettarget1.

我遇到的另一个问题是 make 总是重建目标,即使没有更改源文件。

4

1 回答 1

13

执行您要求的示例 CMakeLists.txt:

ADD_EXECUTABLE(target1 a.c)

ADD_EXECUTABLE(target2 EXCLUDE_FROM_ALL b.c)

对我来说,如果源文件未更改(或修改时间未更改),它不会重建目标。我得到的输出:

$ make -f Makefile 
Scanning dependencies of target target1
[100%] Building C object CMakeFiles/target1.dir/a.c.o
Linking C executable target1
[100%] Built target target1
[$ make -f Makefile 
[100%] Built target target1

请注意,第二个 make 不会重建任何内容。

(您可以阅读CMake 手册了解此类信息)

于 2012-04-20T14:52:43.387 回答