在 Ubuntu 12.10(通过 repos 安装 libboost)上使用 CMake 2.8.9 和 Boost 1.49 编译程序时遇到问题。目前,该程序只是一些共享库和一个可执行文件(尚未使用这些库)。可执行文件用于boost::program_options
解析输入。
它的布局是这样的(会有更多的目录,例如共享库和包含,但它们还没有在 CMake 中提供):
src
|- tools
| |- CMakeLists.txt
| |- main.cpp <-- main executable
|- CMakeLists.txt
当我手动编译时,它可以工作,但是当我 CMake 时,它会破坏一些文本,然后在最后出现段错误。到目前为止的程序代码只是program_options
文档中的“第一个”程序(您可以在此处查看)。
我使用的手动编译命令是:
g++ -Wall -o myapp src/tools/main.cpp -lboost_program_options
它给出了正确的输出myapp --help
:
Allowed options:
--help produce help message
--compression arg set compression level
CMake 文件如下所示:
# src/CmakeLists.txt
CMAKE_MINIMUM_REQUIRED(VERSION 2.6)
PROJECT(testApp CXX)
FIND_PACKAGE( Boost COMPONENTS program_options REQUIRED)
INCLUDE_DIRECTORIES(${Boost_INCLUDE_DIR})
ADD_DEFINITIONS(-g -O2
-fsigned-char -freg-struct-return
-Wall -W -Wshadow -Wpointer-arith -Wcast-qual -Winline -Werror)
ADD_SUBDIRECTORY(tools)
# src/tools/CmakeLists.txt
ADD_EXECUTABLE(main main.cpp)
TARGET_LINK_LIBRARIES(main
${Boost_LIBRARIES})
#rename to the final outut name
SET_TARGET_PROPERTIES(main
PROPERTIES OUTPUT_NAME myapp)
然后当我运行时myapp --help
,我得到以下输出:
,@:
--help produce help message
--compression arg set compression level
Segmentation fault (core dumped)
“@”符号经常变为其他符号,例如“`”、“�”和 Unicode-codepoints-in-boxes,这意味着它正在向我打印垃圾内存。
我在这个 CMake 设置中做错了什么?