2017-04-25 5 views
0

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に関するヒントも歓迎します。

答えて

0

私はしばらくして解決策を見つけました。

ファイル(..)コマンドを除いてすべてが問題ありません。別の場所について は、例えば、異なる変数を使用する必要があります。その後、

# Configure source files for production code 
file(GLOB SOURCES_PRODUCTION ../../sources/*.cpp) 

# Configure source files for unit-test code 
file(GLOB SOURCES_TEST source/*.cpp) 
file(GLOB SOURCES_SUBS source/subs/*.cpp) 

そして:

add_executable(myProject ${SOURCES_PRODUCTION} ${SOURCES_TEST} ${SOURCES_SUBS}) 

それが問題であるように、可変SOURCEが使用されている場合、すべてのassigmentは、データを上書きし、最後にそれを最後のパスのみが含まれます。

関連する問題