C++ CMake配置_文件未包含在静态库中

C++ CMake配置_文件未包含在静态库中,c++,build,cmake,C++,Build,Cmake,目录结构如下: project | ... | CMakeLists.txt | - build/ | - bench/ | libbench_main.a // static library containing symbols | foo.h | - bench/ | - bench_main.cc | - CMakeLists.txt

目录结构如下:

project
   | ...
   | CMakeLists.txt
   | - build/
         | - bench/
               | libbench_main.a  // static library containing symbols
               | foo.h
   | - bench/
         | - bench_main.cc
         | - CMakeLists.txt
         | - foo.h.in
我想
libbench\u main.a中包含foo.h

// project/bench/bench_main.cc
#include "foo.h"
...

// project/bench/foo.h.in
#cmakedefine01 BAR
因此,据我所知,预期结果是,如果我在libbench_main.a上执行
nm
,在构建它之后,我应该会看到
符号

就CMake而言,CMake对我来说也非常简单:

// project/bench/CMakeLists.txt
...
set(BAR FALSE)
configure_file(foo.h.in foo.h @ONLY)
add_library(bench_main STATIC bench_main.cc foo.h)
target_include_directories(bench_main PRIVATE ${CMAKE_CURRENT_BINARY_DIR})
...
对吧??因此,我配置了文件,在
project/build
中运行
cmake-GNinja..
后,我得到以下结果:

// project/build/bench/foo.h
#define BAR 0
一切如期而至。但是,当我在
project/build
中运行
ninjabench/libbench\u main.a
并实际构建它时,没有错误,但是
nm
-ing
project/build/bench/libbench\u main.a
显示符号不在那里。我不知道这么简单的一组命令怎么可能不包含它——在CMake中,它的意思是要添加的。这是一个干净的
build
目录,我应该添加它,这样就不会有问题了

如果这有什么不同的话,这是在Ubuntu上的,使用CMake版本3.12。

\define BAR 0
是一个C预处理器指令,因此不定义任何符号。您需要显式地使用这个定义。例如:
const extern bool bar(bar)在您的
bench\u main.cc
中。它也可以在
foo.h.in
中直接定义为
boolbar=@bar@
如果将
CMakeLists.txt中的行更改为
set(BAR false)
(小写false)。只需记住在使用全局变量时


此外,无需在
add_库(bench\u main STATIC bench\u main.cc)

\define BAR 0
是一个C预处理器指令,因此不定义任何符号。您需要显式地使用这个定义。例如:
const extern bool bar(bar)*.cc
file@Ptaq666-也许这是一个更好的答案?另外,将
project/bench/foo.h.in
更改为使用类似
boolbar=@bar工作,假设我更改了CMake?这是个好主意吗?