Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/133.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ Tup变量未正确构建_C++_Tup - Fatal编程技术网

C++ Tup变量未正确构建

C++ Tup变量未正确构建,c++,tup,C++,Tup,我从make切换到tup,并试图让它构建不同的变体(调试和生产)。我的源代码树如下所示: | .tup | bin | build_debug | | tup.config | build_default | | tup.config | include (headers directory) | src (source files directory) | | runs (directory containing additional source files) | Tupfile 和我的T

我从make切换到tup,并试图让它构建不同的变体(调试和生产)。我的源代码树如下所示:

| .tup
| bin
| build_debug
| | tup.config
| build_default
| | tup.config
| include (headers directory)
| src (source files directory)
| | runs (directory containing additional source files)
| Tupfile
和我的
Tupfile

preload bin
preload src
preload src/runs

COMPILER = g++
ifeq (@(DEBUG),y)
FLAGS = -Wall -std=c++17 -O0 -g 
else
FLAGS = -Wall -std=c++17 -O3 -march=native -flto -pipe
endif

: foreach src/*.cc src/runs/*.cc |> $(COMPILER) -c %f -o %o $(FLAGS) |> %B.o
: src/*.o src/runs/*.o |> $(COMPILER) %f -o %o $(FLAGS) |> bin/a.out
我想让它在
src
目录中创建对象文件,并在
build*
目录中的
bin
目录中创建二进制文件

当我运行
tup
时,它将直接在
build*
目录中创建对象文件(因此不在
build*/src
目录中),并且不会创建任何二进制文件

我做错了什么

编辑
当在基本目录中构建而没有任何
build*
目录时,它会创建一个二进制文件,但也会将对象文件放在基本目录中,而不是放在
src

中,因此我在tup手册的帮助下解决了这个问题

%B只扩展到文件名,而不是文件名,包括文件到basedir的相对路径,这就是为什么在基本目录中创建对象文件而无法生成二进制文件的原因(我认为它有效,因为我仍然有一些使用make生成的旧对象文件)

我将我的
Tupfile
重写为:

preload src
preload src/runs

COMPILER = g++
ifeq (@(DEBUG),y)
FLAGS = -Wall -std=c++17 -O0 -g 
else
FLAGS = -Wall -std=c++17 -O3 -march=native -flto -pipe
endif

: foreach src/*.cc |> $(COMPILER) -c %f -o %o $(FLAGS) |> src/%B.o
: foreach src/runs/*.cc |> $(COMPILER) -c %f -o %o $(FLAGS) |> src/runs/%B.o
: src/*.o src/runs/*.o |> $(COMPILER) %f -o %o $(FLAGS) |> bin/a.out