mingw-4.9、cmake 3.8、およびBoost 1.63.0を使って、私のプロジェクトをWindows 7でコンパイルしたいと思います。 単体テストプロジェクトです。それは実稼働のソースディレクトリからファイルを受け取り、テストフォルダのモックアップ(置換)からのテストファイルはsepareteフォルダ内の場所です。静的リンクwindowsのmingwのためのcmakeのboost.test
私が間違っていることはわかりません。
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)
私はその後、私は
を実行し、Makefileを生成するために、CMakeのGUI(v3.8.0のRC4)を使用しています... 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プロジェクトで私にとってはです。 (ブースト、MinGW、同じパス、設定、バージョンなど)
私は必要な場合にもっと情報を提供することができます。
CMakeLists.txtに関するヒントも歓迎します。