0
我想在Windows 7上使用mingw-4.9,cmake 3.8和Boost 1.63.0来编译我的项目。 这是一个独立的单元测试项目。它将生产源目录中的文件和测试文件夹中的测试文件模型(替换)都放在分隔文件夹中。静态链接boost.test与cmake窗口上的mingw
我不知道我在做什么错。
的CMakeLists.txt
cmake_minimum_required(VERSION 3.8)
project(myProject)
# C, C++ are enabled by default
#enable_language(C CXX)
#definitions
add_definitions(-DWIN32)
add_definitions(-DBOOST_UNITTEST)
add_definitions(-DG_NEWIOSTREAM)
# Configure outputs
set(ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/../../output/lib")
set(LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/../../output/lib")
set(RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/../../output/bin")
# Detect operating system
message(STATUS "Operating system is ${CMAKE_SYSTEM_NAME}")
if($(CMAKE_SYSTEM_NAME) STREQUAL "Linux")
add_definitions(-DSYSTEM_LINUX)
endif()
if($(CMAKE_SYSTEM_NAME) STREQUAL "Windows")
add_definitions(-DSYSTEM_WINDOWS)
endif()
# Detect host processor
message (STATUS "The host processor is ${CMAKE_HOST_SYSTEM_PROCESSOR}")
# Settings the Boost Library
set(Boost_USE_STATIC_LIBS ON)
set(Boost_USE_MULTITHREADED ON)
set(Boost_USE_STATIC_RUNTIME OFF)
# Debuging for cmake
#set(Boost_DEBUG ON)
# Set path to the Boost Library
set(Boost_NO_SYSTEM_PATHS ON)
set(BOOST_ROOT "c:\\dev\\external")
set(BOOST_INCLUDEDIR "C:\\dev\\external\\include")
set(BOOST_LIBRARYDIR "C:\\dev\\external\\lib\\boost")
# At the end find the package, include and link
find_package(Boost 1.63.0 REQUIRED COMPONENTS unit_test_framework regex)
include_directories(${Boost_INCLUDE_DIRS})
# Configure source files for production code
file(GLOB SOURCES ../../sources/*.cpp)
# Configure source files for unit-test code
file(GLOB SOURCES source/*.cpp)
file(GLOB SOURCES source/subs/*.cpp)
# Tell the cmake what needs to be builded
include_directories(${CMAKE_CURRENT_SOURCE_DIR})
add_executable(myProject ${SOURCES})
# Tell CMake to link it
target_link_libraries(myProject ${Boost_LIBRARIES})
文件结构在我的项目:
project
|--sources <-(production code)
|--test
| |--source <-(test code)
| | |--subs <-(substitutions, mockups)
| |--CMakeLists.txt
|--output
|--test <-(cmake generates here)
我使用的CMake GUI(v3.8.0 RC4)来生成Makefile文件,然后我跑
... output\test>C:\MinGW\bin\mingw32-make.exe
从CMake准备的文件的目录和输出如下:
...
[ 87%] Building CXX object CMakeFiles/myProject.dir/source/subs/subs_trace_publ.cpp.obj
[100%] Linking CXX executable myProject.exe
C:/dev/external/lib/boost/libboost_unit_test_framework-mgw49-mt-1_63.a(unit_test_main.o):unit_test_main.cpp:(.text.startup+0x14):
undefined reference to `init_unit_test_suite(int, char**)'
collect2.exe: error: ld returned 1 exit status
CMakeFiles\myProject.dir\build.make:260: recipe for target 'myProject.exe' failed
mingw32-make[2]: *** [myProject.exe] Error 1
CMakeFiles\Makefile2:66: recipe for target 'CMakeFiles/myProject.dir/all' failed
mingw32-make[1]: *** [CMakeFiles/myProject.dir/all] Error 2
Makefile:82: recipe for target 'all' failed
mingw32-make: *** [all] Error 2
相同的代码工程 CodeBlocks 16.01项目中的我。 (Boost,MinGW,相同路径,设置,版本等)
如果需要,我可以提供更多信息。
我也欢迎关于CMakeLists.txt的一些提示。