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
-ingproject/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?这是个好主意吗?