我写了一个CMakeLists.txt
文件,其中包含2个可执行文件(target1
和target2
):
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:全部
我想我需要一种方法将此default_target
设置为target1
。
我遇到的另一个问题是make总是重建目标,即使没有更改源文件。
答案 0 :(得分:11)
执行您请求的示例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 manual)